MySQL中的完整性约束条件(主键、外键、唯一、非空)

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:467

MySQL中的完整性约束条件(主键、外键、唯一、非空)

数据库的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。
主键
1.创建表时候指定主键
创建表user(id, username, age),并且id字段非空自增。
CREATE TABLE user(id BIGINT(20) NOT NULL AUTO_INCREMENT,username VARCHAR(16) NOT NULL,age TINYINT,PRIMARY KEY(id));
给数据库插入3条字段。
alter table user values(1,'user1',19;2,'user2',20;3,'user3',21);

2.修改表中字段为主键
创建表user1(id, username),不设置主键,通过修改设置主键。
CREATE TABLE user1(id BIGINT(20),username VARCHAR(16) NOT NULL);
ALTER TABLE user1 ADD PRIMARY KEY(id),MODIFY id BIGINT(20) AUTO_INCREMENT;
通过SHOW INDEX FROM user1查看表user1的主键,可以看到有一个名字为PRIMARY的主键索引。

3.删除主键
删除表user1中的主键,如果主键为自增,那么还需要将自增去掉。
ALTER TABLE user1 DROP PRIMARY KEY,MODIFY id BIGINT(20);

外键
外键用来指定参照完整性约束,被指定为外键的列必需要有索引,外键参考列必需为另一个表的主键。

1.创建表的时候指定外键
创建表article(id, u_id, article_name),u_id为该表的外键,引用user表中的id。
CREATE TABLE article(id BIGINT(20) NOT NULL AUTO_INCREMENT,u_id BIGINT(20) NOT NULL,article_name VARCHAR(16) NOT NULL,PRIMARY KEY(id),CONSTRAINT fk_user_article_uid FOREIGN KEY (u_id) REFERENCES user(id));
通过SHOW INDEX FROM article查看索引,可以看到该表中有两个索引。

2.修改表时添加外键约束
修改的时候表中如果有记录就会出错。
ALTER TABLE article ADD CONSTRAINT fk_user_article_uid FOREIGN KEY(u_id) REFERENCES user(id);
添加了外键之后,再插入不存在user的id值的u_id字段就会出错。

3.删除外键
ALTER TABLE article DROP FOREIGN KEY fk_user_article_uid;
通过SHOW INDEX FROM article可以看到,虽然外键被删除,但是之前设置为外键的列依然有索引。

这时再进行插入操作,插入在user表中不存在的u_id值,这时可以成功地进行插入。
INSERT INTO article(u_id, article_name) VALUES (4, 'article4');

唯一
1.创建表的时候创建唯一约束条件
第一种方法,这种方法不能指定唯一索引的名字。
CREATE TABLE test1(id BIGINT(20) NOT NULL AUTO_INCREMENT,test1 INT UNIQUE KEY,PRIMARY KEY(id));
查看索引,可以看到唯一索引的名字与字段名相同。
如果插入相同的test1,就会报错。

第二种方法,可以制定唯一索引的名字
CREATE TABLE test1(id BIGINT(20) NOT NULL AUTO_INCREMENT,test INT,PRIMARY KEY(id),UNIQUE KEY uk_test(test));
通过查看索引可以看到,非空索引的名称是设定的名称。

2.修改表时添加
ALTER TABLE test1 ADD UNIQUE uk_test(test);

3.删除
ALTER TABLE test1 DROP INDEX uk_test;

非空
1.创建表的时候指定
CREATE TABLE test(id BIGINT(20) NOT NULL AUTO_INCREMENT,test1 INT NOT NULL,PRIMARY KEY(id));

2.修改删除
删除非空
ALTER TABLE test MODIFY test1 INT;

添加非空
ALTER TABLE test MODIFY test1 INT NOT NULL;
总结
上述的四种约束性添加中,主键、外键、唯一在创建时就直接建立了该列的索引,非空是与索引无关的,不过非空字段也是可以建立索引的。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】