1.添加和删除字段操作
注意:不管是添加还是删除都要向ALTER TABLE到表
添加字段
1 2 3 |
ALTER TABLE [IF EXISTS] tbl_name; ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称]; |
删除字段
1 2 3 |
ALTER TABLE tbl_name; DROP 字段名称; |
先创建一个表
1 2 3 |
CREATE TABLE IF NOT EXISTS user1( id INT UNSIGNED AUTO_INCREMENT KEY ); |
可以看到这个时候有一个自增长恒为正数的主键id,然后我们向它添加一个字段:
1 2 3 |
-- 添加用户名字段 username VARCHAR(20) ALTER TABLE user1; ADD username VARCHAR(20); |
可以看到新的字段username已经添加进来了,然后我们在username之后添加字段,加到某个字段之后我们使用关键字AFTER 字段名
1 2 3 |
-- 添加邮箱字段 email VARCHAR(50) NOT NULL UNIQUE 加到username之后 ALTER TABLE user1 ADD email VARCHAR(50) NOT NULL UNIQUE AFTER username; |
然后我们添加一个字段到起始位置,使用FIRST关键字
1 2 3 |
-- 添加测试字段 test TINYINT(1) NOT NULL DEFAULT 0; 加到首位 ALTER TABLE user1 ADD test TINYINT(1) NOT NULL DEFAULT 0 FIRST; |
现在我们可以看到刚才添加的test字段已经到了起始位置,现在删除这个字段,使用DROP
1 2 3 |
-- 删除test字段 ALTER TABLE user1 DROP test; |
在选择了表之后我们可以使用逗号进行分割多条命令,这样就可以一次性的添加或者删除了,也就是一次选中表,完成多次不同的操作:
1 2 3 4 5 |
-- 添加age、addr字段,删除email字段 ALTER TABLE user1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 18, ADD addr VARCHAR(100) NOT NULL DEFAULT '北京', DROP email; |
2.添加和删除默认值的操作
添加默认值
1 2 3 |
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值; |
删除默认值
1 2 3 |
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT; |
先新建一个表:
1 2 3 4 5 6 |
CREATE TABLE user2( id INT UNSIGNED AUTO_INCREMENT KEY, username VARCHAR(20) NOT NULL, age TINYINT UNSIGNED NOT NULL DEFAULT 18, email VARCHAR(50) NOT NULL ); |
这个时候email没有默认值,我们给它添加一个:
1 2 3 |
-- 给email字段添加默认值 imooc@qq.com ALTER TABLE user2 ALTER email SET DEFAULT 'imooc@qq.com'; |
可以看到email已经被添加了默认值,然后我们删除一下age的默认值,现在默认值是18
1 2 3 |
-- 删除age字段的默认值 ALTER TABLE user2 ALTER age DROP DEFAULT; |
可以看到刚才age是18的默认值已经被删除了,这个时候没有默认值。
3.MODIFY和CHANGE关键字的使用
修改字段类型、字段属性
1 2 |
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]; |
修改字段名称、字段类型、字段属性
1 2 3 |
ALTER TABLE tab_name CHANGE 新字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]; |
它们的区别就在于MODIFY不能改名字,CHANGE可以,其他的都是相同的。
先创建一个表
1 2 3 4 5 6 |
CREATE TABLE user3( id INT UNSIGNED AUTO_INCREMENT KEY, username VARCHAR(5) NOT NULL UNIQUE, password CHAR(32) NOT NULL, email VARCHAR(10) NOT NULL ); |
现在username字段的长度只有5,把它改成20
1 2 3 |
-- 将用户名字段的类型改为20 ALTER TABLE user3 MODIFY username VARCHAR(20) NOT NULL; |
可以看到username字段已经变成了20,但是刚才我们是NOT NULL,现在变成了NULL,所以我们就需要将它加上NOT NULL。
接下来我们将密码长度改成40,然后将email添加到最前面,并且他们都不能为空。
1 2 3 4 5 6 7 |
-- 将密码的长度改为40 ALTER TABLE user3 MODIFY password CHAR(40) NOT NULL; -- 将email字段改为VARCHAR(50) NOT NULL FIRST ALTER TABLE user3 MODIFY email VARCHAR(50) NOT NULL FIRST; |
现在我们修改一下名称,MODIFY不能够改变名称,我们需要使用CHANGE
1 2 3 4 5 6 7 8 9 10 11 12 |
-- 将username 名称改为user ALTER TABLE user3 CHANGE username user VARCHAR(20) NOT NULL; -- 将password 名称改为pwd ALTER TABLE user3 CHANGE password pwd CHAR(40) NOT NULL; -- 将email改成userEmail 类型改成VARCHAR(100) DEFAULT 'imooc@qq.com' ALTER TABLE user3 CHANGE email userEmail VARCHAR(100) DEFAULT 'imooc@qq.com'; |
4.主键和唯一索引操作
添加主键
1 2 3 |
ALTER TABLE tbl_name ADD PRIMARY KEY(字段名称); |
删除主键
1 2 3 |
ALTER TABLE tbl_name DROP PRIMARY KEY; |
先创建一个表往里面添加和删除主键
1 2 3 4 5 6 7 8 |
-- 测试添加和删除主键 CREATE TABLE user4( id INT UNSIGNED, username VARCHAR(20) NOT NULL ); -- 添加主键 ALTER TABLE user4 ADD PRIMARY KEY(id); |
现在把主键删除:
1 2 3 |
-- 删除主键 ALTER TABLE user4 DROP PRIMARY KEY; |
再看另一种情况,创建的时候有主键和自增
1 2 3 4 |
CREATE TABLE user5( id INT UNSIGNED AUTO_INCREMENT KEY, username VARCHAR(20) NOT NULL ); |
这个时候删除主键是会报错了因为主键还有自增,如果删掉了主键自增就是不成立的,所以需要向删除AUTO_INCREAMENT才能够删除主键。
添加唯一性索引
1 2 3 |
ALTER TABLE tbl_name ADD UNIQUE KEY | INDEX [index_name](字段名称); |
删除唯一性索引
1 2 3 |
ALTER TABLE tbl_name DROP index_name; |
先创建一个表:
1 2 3 4 5 6 7 |
-- 测试添加和删除唯一 CREATE TABLE user6( id INT UNSIGNED AUTO_INCREMENT KEY, username VARCHAR(20) NOT NULL UNIQUE, password CHAR(32) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE ); |
注意:建立唯一索引和主键索引的时候如果没有取名字,那么默认的就是字段的名称。
1 2 3 4 5 6 7 |
-- 删除唯一索引 username 和email ALTER TABLE user6 DROP INDEX username; ALTER TABLE user6 DROP INDEX email; |
添加唯一索引
1 2 3 4 5 6 |
-- 添加唯一索引 ALTER TABLE user6 ADD UNIQUE KEY(username); ALTER TABLE user6 ADD UNIQUE INDEX uni_email(email); |
5.修改数据表名称
方法一
1 |
ALTER TABLE tbl_name RENAME [TO | AS new_tbl_name |
方法二
1 |
RENAME TABLE tbl_name TO new_tbl_name; |
测试一下
1 2 3 4 5 6 7 8 9 10 |
ALTER TABLE user6 RENAME TO user666; ALTER TABLE user666 RENAME AS user6; ALTER TABLE user6 RENAME user666; RENAME TABLE user666 TO user6; |