目录
本文主要总结工作这些年来,mysql alter 的实践经验。
以 user 表为例,来说明添加字段、添加索引的语法和示例。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(50) NOT NULL COMMENT '用户名',
`create_datetime` datetime NOT NULL COMMENT '创建时间',
`update_datetime` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
字段相关
如何添加字段?
ALTER table 表名 ADD COLUMN 字段名 字段类型;
举例说明:给 user 表添加 age 字段 。
ALTER table user ADD COLUMN age int(11);
tips: mysql 默认将新增字段添加到最后一列。如果说将 age 字段添加在 update_datetime 字段后面,是不是很难看?为了看起来优雅,我们可以在指定字段后面添加字段。
如何在指定字段后面添加字段?
ALTER table 表名 ADD COLUMN 字段名 字段类型 after 指定字段;
举例说明:为了看起来优雅,我们在 name 字段后面添加 age 。
ALTER table user ADD COLUMN age int(11) after name;
字段看起来优雅了,但是我们这块假设有一个需求给字段设置默认值,如何操作呢?
如何给字段设置默认值呢?
ALTER table 表名 ALTER COLUMN 字段 set default 默认值;
举例说明:假设给年龄设置默认值0。
ALTER table user ALTER COLUMN age set default 0;
字段优雅了,也有了默认值,但是后来者如何知道该字段是什么意思呢?我们这块可以给字段添加注释。
如何给字段添加注释?
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 COMMENT 注释;
举例说明:给年龄字段添加注释。
ALTER TABLE user MODIFY COLUMN age int(11) COMMENT '年龄';
前面只是添加字段、在指定字段后面添加字段、给字段设置默认值、给字段添加注释四个基本操作,为了得到优雅、完善、利他的结果,我们可以将基本操作组合起来使用。
如何在指定字段后面添加字段,同时设置默认值且添加注释?
ALTER TABLE 表名 ADD COLUMN 字段名 字段类型 default 默认值 COMMENT 注释 after 指定字段;
举例说明:在 name 字段后面添加 age 字段,设置默认值 0,且添加年龄注释。
ALTER TABLE user ADD COLUMN age int(11) default 0 COMMENT '年龄' after name;
如果有一天因为业务需求,某一个字段不在需要了,我们这块需要将字段删除。
如何删除字段?
ALTER table 表名 DROP COLUMN 字段名;
举例说明:删除 age 字段。
ALTER table user DROP COLUMN age;
突然有一天在创建字段的时候,字段拼错了,需要修改字段名。
如何修改字段名?
ALTER table 表名 CHANGE 原字段名 新字段名 字段类型;
举例说明:name nick_name
ALTER table user CHANGE name nick_name varchar(50);
索引相关
为了加快对数据的读写,需要对字段添加索引。
如何给字段添加索引?
ALTER table 表名 ADD key 索引名(字段名);
举例说明:给 name 字段添加索引。
ALTER table user ADD key idx_name(name);
假设表中的一个字段特长,给字段添加索引后,索引特别大,为了使得索引小点,我们发现给字段设置特定长度也能满足需求,解决问题。
如何给字段设置特定长度索引?
ALTER table 表名 ADD key 索引名(字段名(长度));
举例说明:给 name 设置长度为10的索引
ALTER table user ADD key idx_name(name(10));
由于业务上的需求,需要对多个字段加索引。
如何给多个字段添加联合索引?
ALTER table 表名 ADD key 索引名(字段名1,字段名2...);
举例说明:给 name 和 age 添加联合索引
ALTER table user ADD key idx_name_age(name, age);
业务上有时候为了保证唯一性,需要添加唯一约束条件。
如何给字段添加唯一索引?
ALTER table 表名 ADD unique 索引名(字段名);
举例说明:给 name 字段添加唯一索引
ALTER table user ADD unique idx_name(name);
当索引不在需要的时候,可以将索引删除。
如何删除索引?
ALTER table 表名 DROP index 索引名;
举例说明:删除 name 索引
ALTER table user DROP index idx_name;