概述:
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类

约束是作用于表中的字段上的,在创建/修改表时可以添加约束
演示
创建表:
sql
create table students(
id int primary key auto_increment comment '学号',
name varchar(20) not null unique comment '姓名',
age int check ( age between 0 and 100) comment '年龄',
staus char(1) default '1' comment '状态',
gender char(1) comment '性别'
)comment '学生表';
insert into students(name,age,staus,gender) values ('小明',18,1,'男'),
('小红',19,0,'女'),
('小李',21,1,'女');
insert into students(name,age,gender) values ('小王',18,'男');
insert into students(name,age,gender) values (null,18,'男'); -- 报错
insert into students(name,age,gender) values ('小赵',17,'女');
insert into students(name,age,gender) values ('小刘',-1,'男'); -- 报错但是id还是+1
insert into students(name,age,gender) values ('小刘',22,'男'); -- id=7
select * from students;

外键约束
概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
语法:
sql
-- 添加外键
CREATE TABLE 表名(
字段名 数据类型,
[CONSTRAINT] [外键名称]FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
示例:
sql
update students set id=6 where id=7;-- 修正
create table class(
id int primary key auto_increment comment '课程号',
cname varchar(20) not null comment '课程名',
tname varchar(20) not null comment '任课教师姓名'
)comment '选修课';
insert into class(cname, tname) values('高等数学','王X'),
('C++','李XX'),
('线性代数','张XX'),
('英语','吴XX'),
('物理','张X'),
('化学','游XX');
alter table students add column courseid int comment '选修课id';
update students set students.courseid= case id
when 1 then 1
when 2 then 2
when 3 then 3
when 4 then 4
when 5 then 5
when 6 then 6
end;
-- 关联students的courseid与class的id
alter table students add constraint fk_courseid foreign key (courseid) references class(id);
-- 删除外键
alter table students drop foreign key fk_courseid;
外键约束的删除和更新行为

其中NO ACTION/RESTRICT为默认行为。
语法:
sql
ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREIGNKEY(外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
-- ON UPDATE CASCADE ON DELETE CASCADE:更新和删除时都CASCADE