目录
1:什么是完整性约束?为什么使用完整性约束?
2:约束分类(按照功能划分)
3:使用案例
3.1:PRIMARY KEY主键测试
3.2:AUTO_INCREMENT测试
3.3:NOT NULL(非空约束,插入不能给空值)
3.4:DEFAULT(列的默认约束)
3.5:UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)
1:什么是完整性约束?为什么使用完整性约束?
数据完整性约束是为了防止不合规范的数据进入数据库,在用户进行增加、修改、删除等操作的时候自动按照一定约束条件进行检查,是不合规范的数据不能进入数据库,保证数据的完整和一致性。侧面也能提高程序运行效率,降低程序复杂性。
2:约束分类(按照功能划分)
1.UNSIGNED(表示没有负数从零开始,应用于mysql的数值类型)
2.ZEROFILL(当数值类型的数据长度不够时,会自动把0填充到数字前至数据的约定长度,自动添加UNSIGNED)
3.NOT NULL(非空约束,插入不能给空值)
4.DEFAULT(列的默认约束)
5.PRIMARY KEY(主键,标识数据唯一性,不能重复自动禁止为空)
6.UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)
7.AUTO_INCREMENT(用于数值类型自动增长,默认从1开始)
8.FOREIGN KEY(外键约束)
3:使用案例
3.1:PRIMARY KEY主键测试
CREATE TABLE test_primary_key(
id INT PRIMARY KEY, 不加UNSIGNED
username VARCHAR(20)
);
INSERT test_primary_key(id,name) VALUES(1,'张三'); 运行结果成功
INSERT test_primary_key(id,name) VALUES(0,'张三'); 运行结果成功INSERT test_primary_key(id,name) VALUES(-1,'张三'); 运行结果成功
CREATE TABLE test_primary_key1(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(20));
INSERT test_primary_key1(id,name) VALUES(1,'张三'); 运行结果成功
INSERT test_primary_key1(id,name) VALUES(0,'张三'); 运行结果成功INSERT test_primary_key1(id,name) VALUES(-1,'张三'); 运行结果失败
3.2:AUTO_INCREMENT测试
CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT test_auto_increment(username) VALUES('A');运行结果成功
INSERT test_auto_increment(username) VALUES('B');运行结果成功
INSERT test_auto_increment(username) VALUES('C');运行结果成功
INSERT test_auto_increment(id,username) VALUES(15,'G');运行结果成功
INSERT test_auto_increment(username) VALUES('C');运行结果成功
INSERT test_auto_increment(id,username) VALUES(NULL,'E');运行结果成功INSERT test_auto_increment(id,username) VALUES(DEFAULT,'F');运行结果成功
3.3:NOT NULL(非空约束,插入不能给空值)
CREATE TABLE test_not_null(
a varchar(20),
b varchar(20) not null);
INSERT test_not_null(a,b) VALUES('',''); 真确
INSERT test_not_null(a,b) VALUES(NULL,NULL); 错误
INSERT test_not_null(a,b) VALUES(NULL,'abc'); 正确
INSERT test_not_null(a) VALUES('TEST'); 错误
3.4:DEFAULT(列的默认约束)
CREATE TABLE test_default(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com'
);
INSERT test_default(username) VALUES('A'); 成功显示默认值
INSERT test_default(username,age,email) VALUES('B',30,'imooc@qq.com'); 成功覆盖
INSERT test_default(username,age,email) VALUES('C',NULL,'imooc@qq.com'); 成功覆盖
INSERT test_default(username,age,email) VALUES('D',NULL,NULL); 错误邮箱无法插入空值
INSERT test_default(username,age,email) VALUES('D',null,''); 成功覆盖INSERT test_default(username,age,email) VALUES('D',NULL,DEFAULT); 成功覆盖
3.5:UNIQUE KEY(唯一索引,一个表中可以有多个,同样的值不能重复,但是null除外)
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的例如用户表的身份证号码等。主键(只能有一个)=UNIQUE KEY(可以多个)+不等于空
CREATE TABLE test_unique(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
email VARCHAR(50) unique key,
card CHAR(18) unique key
);
INSERT test_unique(username,email,card) VALUES('A','A@QQ.COM','1'); 成功
INSERT test_unique(username,email,card) VALUES('A','1A@QQ.COM','12'); 失败username重复
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL); 成功
INSERT test_unique(username,email,card) VALUES('C',NULL,NULL); 成功