目录

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); 成功