参考书籍:MySQL与MariaDB学习指南
修改一张数据库里面的表之前我们需要对表进行备份,备份的工作一方面可以对表进行备份,另一方面是对整个数据库备份。
1.先创建一个数据库和一张表
CREATE database dogs; /*创建一个dogs的数据库*/
/*或者使用dogs作为默认的数据库 USE dogs; */
CREATE TABLE dogs.dog( /*创建一个dogs表*/
id INT AUTO_INCREMENT,
scientfic_name char(26),
age INT(2)
);
2.对表操作之前先进行备份
//user_name是你的用户名 -p 表示需要输入密码 '>' 是重定向符,将表的内容放入备份的sql文件里面
mysqldump --user='user_name' -p \
dogs dogs > /opt/dog.sql ;
//备份数据库的操作
mysqldump --user'user_name' -p \
dogs > dogs.sql
3.恢复备份的操作
mysql --user'user_name' -p \
dogs < dogs.sql
由于每一次修改表以及删除表的操作都比较难恢复到初始态。一旦出现错误就会比较麻烦。所以我们需要先学习并且养成备份的习惯
修改表的语法
1.添加一列order_id
ALTER TABLE dogs
ADD COLUMN order_id INT;
2.在id项后面一项添加order_id 项
ALTER TABLE dogs
ADD COLUMN order_id INT AFTER id;
3.设置一个具有枚举类型参考表的新列
如果一个列的数据是固定的,那么在定义它的时候我们可以使用枚举类型,也可以再创建一个表去给出详细的信息。但是枚举类型本身就是一种参考表
/*创建一个狗的原产地这样一个列*/
ALTER TABLE new_dog
MODIFY COLUMN address
ENUM(
'ASIAN',
'AMERICA',
'Europe',
'Austrlia');
AFTER order_id;
3.关于表的其他操作
DESCRIBE dogs.dog; /*查看表的内容*/
DROP dogs.dog; /*删掉表dog*/
SHOW COLUMNS FROM table_name LIKE 'col_name';/*查看一个列*/
CREATE TABLE test.new_dog LIKE dogs.dog /*复制一份dog表到new_dog里面,但是没有数据,只有相应的配置*/
设置列的默认值
可以使用CHANGE语句或者是ALTER语句,而且不用担心的是修改了列的默认值不会对之前的保存数据有影响
/*修改new_dogs表的address项的类型为int 并且初始值设置为8*/
ALTER TABLE new_dogs
CHANGE COLUMN address INT DEFAULT 8;
/*修改表的age项的初始值默认为8 使用ALTER*/
ALTER TABLE new_dogs
ALTER COLUMN age SET DEFAULT 8;
修改AUTO_INCREMENT的默认值
/*从下一行开始初始值从10开始*/
ALTER TABLE birds
AUTO_INCREMENT = 10;
重命名表的操作
重命名的时候要注意,不能与其他表重名,而且最好不要包含连接符 ‘- ’ 因为Mysql会把他当成减号
RENAME TABLE table_old TO table_new ;
并且RENAME命令也可以用来移动表,这一点和linux shell中的mv差不多,可以将一个表不改名字的移动到另一个数据库。
使用order by指令对表进行重排序
SELECT * FROM code
ORDER BY name
LIMIT 3;
关于索引的理解
索引是为了更加方便的对表内的信息进行检索和查找,但是索引并不是列。一个列是PRIMARY KEY是说它与索引关联了,而不是说它就是索引。索引可以是单独定义出来,也可以是建表之后添加的。
SHOW INDEX FROM tables \G /*查看表的参数信息,可以看到当前的索引关联*/
/*explain语句是用来解释,索引被如何应用的而不是显示查找结果 */
EXPLAIN SELECT * FROM tables WHERE name = 'JJ' \G
/*创建索引*/
ALTER TABLE humans
ADD INDEX human_name(name_last,name_first);
/*该索引是一对键值对,所以无论输入哪个名字都会使用human_name选项*/
对一个索引值关联的列进行修改名称之前需要将主键的值去掉
DROP PRIMARY KEY之后再对列名进行修改,不然会出现主键不能与某一列关联的错误。