一、如何添加主键约束和唯一性约束
1、添加主键约束
执行语法:
alter table tableName add primarykey(column_name);#千万别忘了加(),同时要保证表结构中没有其他的主键,因为一个表中只能有一个主键。
2、添加唯一性约束
执行语法:
alter table tableName addunique(column_name);#一个表中可以有多个唯一性约束。
二、删除主键和唯一性约束
1、删除主键
在MySQL中删除主键需要两步.
(1)如果有auto_increment,先删除之;
(2)删除主键约束 primary key。
以本人自建数据表aaa为例
首先要删除auto——increment
语法如下:
alter table aaa modify id int(11);#这里用的modify,只改变数据类型,也可以用change,改变列名的同时输入新的数据类型。
执行后,表结构如下:
下一步就是删除主键
语法如下:
alter table aaa drop primary key;
执行完,表结构如下:
这时候主键就已经删除成功了。
2、删除唯一性约束
语法如下:
alter table tableName drop index key_name;#删除唯一性约束,实际就是删除索引
drop index key_name on tableName; #两种方法均可
但我在练习删除唯一性约束的时候,刚开始一直出现:ERROR 1091 (42000): Can't DROP 'loc'; check that column/key exists 这样的报错,百思不得其解,经过不懈的百度,终于找到原因,特地跟大家分享一下,希望不要再犯同样的错误。
究其原因,是我们把key_name跟column_name混淆了,注意上面的语法中我写的是key_name,并非colunm_name。在学习mysql的过程中,尤其是练习时,经常会进行修改列名的操作,如果你在修改列名以前就已经定义了本列为唯一性约束,那么键名还是修改前的列名。这个时候就需要我们查一下表的key结构,找到key_name。
语法如下:
show keys from tableName;
执行后,结果为
注意,我这里的key_name跟column_name就是不同的,所以在执行 drop index loc on aaa;时就会一直提示错误。
所以,要执行以下语法才可以:
alter table aaa drop index location;
执行完,结果为
这个时候,loc的唯一性约束就删除了。
其实,当我们不确定是否改过列名时,就可以直接通过show keys来找到key_name,这样不管有没有改变列名,都有key_name为准,就可以准确的删除唯一性约束了。