我们在修改表字段类型和约束条件的时候,如果表中的字段已经有值了,但是你修改的这个类型和字段里边的值不匹配是不允许修改的,就比如说你当初设置字段的时候,字段的值是允许存空值,并且字段里边已经存储空值了,但是你后来又要修改这个字段不能存空值,那就会发生冲突,是不允许修改的,还有一个需要注意的是,需要修改的地方写新的,不需要修改的地方要原样的给抄下来,如果不原样抄下来那就恢复到系统给的默认配置
我现在要修改下图表里的年龄字段类型为int类型,并且约束条件是不允许为空
查看表结构
mysql> desc tab15;
修改字段类型和约束条件
mysql> alter table tab15
-> modify
-> 年龄 int(4) unsigned not null; //unsigned不需要修改的要原样抄下来
Query OK, 0 rows affected (0.01 sec)
查看表结构
mysql> desc tab15;
那我们在来做一个错误的示范,我现在给这个表里边允许为空的字段赋个空值,然后我在修改它不允许为空,我们看看效果
赋值的时候不允许为空的字段要赋值
mysql>insertintotab15 values(null,"haha","女",18,null,null);
Query OK, 1 row affected (0.00 sec)
查看表记录
mysql> select * from tab15;
接下来我要修改一下编号字段不允许为空,看看能修改成功吗
mysql> alter table tab15
-> modify
-> 编号 int(3) not null;
ERROR 1138 (22004): Invalid use of NULL value
解释:无效的空值,这字段里边已经有空值了,但是你又要修改这个字段的值不能为空,这就是冲突了,是不允许修改的
还有一个注意事项,修改字段类型和约束条件的时候,修改的写新的,不改的要原样的抄下来,就比如那个年龄字段我当初设置的时候是不能存负数,也不能赋空值,那现在如果我在想修改类型的时候,没有把约束的条件抄下来,那它就恢复到系统的默认配置,
mysql> alter table tab15
-> modify
-> 年龄 tinyint(4); //只修改了字段类型,原有的约束条件我没有抄下来
Query OK, 1 row affected (0.02 sec)
那我们在看看表结构
mysql> desc tab15;
字段原有的设置没有抄下来将会恢复到系统默认的配置
我们在修改表字段的时候,还可以调整字段的位置,比如说现在我想把职业字段调到编号字段的下边
mysql> alter table tab15
-> modify
-> 职业 varchar(50) after 编号;
Query OK, 0 rows affected (0.04 sec)
解释:只想调整位置也是把原先的类型都原样抄下来,然后指定放在那个字段的后边就可以了
查看表结构
mysql> desc tab15;
如果你觉得哪个字段的位置不合理,那你就可以通过这样的方法去调整位置,想调到第一个字段那就用first(第一),想调到某一个字段的下边,那就用after(后)
◆修改字段名
基本语法
ALTER TABLE 表名
CHANGE 原字段名 新字段名 类型(宽度) 约束条件;
修改字段名字的时候,字段里边的值是不受影响的,但是也有几个注意事项,需要改变的写新的,不需要改变的就原样抄下来,不然它也会恢复到默认配置,修改字段名时也可以顺便修改字段的类型和约束条件,但如果修改的类型与约束条件与字段里边的值发生冲突时也是不允许修改
我现在要把这个表的职业字段的名字修改一下,修改成家庭地址
修改字段名
mysql> alter table tab15
-> change 职业 家庭地址 varchar(50) after 年龄; //顺便调整到年龄字段后边
Query OK, 0 rows affected (0.06 sec)
查看表结构
mysql> desc tab15;
修改字段名的时候,可以修改字段的类型,也可以设置约束条件,但是不要和原有字段里边的值发生冲突
◆删除字段名
基本语法
ALTER TABLE 表名
DROP 字段名
删除表字段的时候,如果表字段里边有值的话,那值也就没了
删除表里的电话字段
mysql> alter table tab15
-> drop 电话;
Query OK, 0 rows affected (0.06 sec)
查看表结构
mysql> desc tab15;
要是想同时删除多个字段的话,用逗号分隔
mysql> alter table tab15
-> drop 年龄, //字段之间用逗号分隔
-> drop 家庭地址;
Query OK, 0 rows affected (0.05 sec)
查看表结构
mysql> desc tab15;
◆修改表名
基本语法
ALTER TABLE 表名
RENAME 新表名; //用的关键字是rename
修改tab15表的名字为haha
mysql> alter table tab15
-> rename haha;
Query OK, 0 rows affected (0.00 sec)
查看表
mysql> show tables;
查看表结构
mysql> desc haha;