(一)什么是完整性约束?
为了防止步符合规范的数据存入数据库,在用户对数据进行增删改
操作时,MySQL提供一种机制来检查数据库中的数据是否满足规定的条件,确保数据的准确性和一致性。
(二)MySQL支持的完整性约束
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
(三)列级约束
列级约束:创建表时添加约束
1 2 3 4 5 6 7 8 9 10 11
| CREATE TABLE stu_info ( `s_id` int(10) PRIMARY KEY AUTO_INCREMENT, `s_name` varchar(10) NOT NULL, `s_sex` char(1) default '男' CHECK(s_sex = '男' or s_sex = '女'), `s_age` int(3) CHECK(s_age > 18 and s_age < 100), `s_born_date` date , `classname` varchar(10), `score` double(5,1), `s_tel` int(11) UNIQUE );
|
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
s_id 主键非空唯一 若设置自动增长(可以 不填/NULL/default)
s_name 非空约束
s_sex 男/女约束
s_age >18 and < 100约束
s_tel 唯一约束
注意:当主键设置了自动增长AUTO_INCREMENT并且插入数据产生错误时,数据没有插进去,但是主键已经自增,出现不连号现象(允许的)
(四)表级约束
表级约束在建表时,在最后一个字段后使用 constraint限制,格式如下
1 2 3 4 5 6 7 8 9
| create table 表名 ( ..., constraint 自定义约束名 约束 (字段名), ... );
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| CREATE TABLE stu_info ( `s_id` int(10) AUTO_INCREMENT, `s_name` varchar(10) NOT NULL, `s_sex` char(1) default '男' , `s_age` int(3) , `s_born_date` date , `classname` varchar(10), `score` double(5,1), `s_tel` int(11),
constraint pk_s_id primary key (s_id), constraint sex_check CHECK(s_sex = '男' or s_sex = '女'), constraint age_check CHECK(s_age > 18 and s_age < 100), constraint s_tel_unique UNIQUE (s_tel) );
|
注意:
- 自增约束前提时主键约束
- auto_increment、not null、default只能使用列级约束
- 表级约束的优点就是当插入不合法的数据时,就会报错自定义的约束名,方便查错误
(五)已存在的表添加约束
对已创建的stu_info表添加约束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| CREATE TABLE stu_info ( `s_id` int(10) , `s_name` varchar(10) , `s_sex` char(1) , `s_age` int(3) , `s_born_date` date , `classname` varchar(10), `score` double(5,1), `s_tel` int(11) );
alter table stu_info add CONSTRAINT pk_s_id primary key (s_id); alter table stu_info add CONSTRAINT sex_check CHECK(s_sex = '男' or s_sex = '女'); alter table stu_info add CONSTRAINT age_check CHECK(s_age > 18 and s_age < 100); alter table stu_info add CONSTRAINT s_tel_unique UNIQUE (s_tel);
alter table stu_info modify s_id int(10) AUTO_INCREMENT; alter table stu_info modify s_name varchar(10) NOT NULL; alter table stu_info modify s_sex char(1) default '男';
desc stu_info;
drop table stu_info;
|
- 图形化操作:添加约束
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)