约束:对表中的数据进行限制,不正确的数据无法添加到表中
举例:当表中约束不允许存在null值,null值不能添加到字段中
约束一共有四个种类:
1、主键约束 2、唯一约束 3、非空约束 4、外键约束
一、主键约束
作用:用来标识数据库中每一条记录,保证每条记录都有一个特定的id,通常把(int)id设为主键
主键的特性:非空,不能重复。
关键字:primary key
设置语法: id int primary key;
通常和auto_increment一起使用:让主键自增
举例使用:创建一张学生表(id,age,name):
CREATE TABLE student(
id INT PRIMARY key auto_increment,
age int,
name VARCHAR(5));
注:id是主键默认从1开始自动递增,不需要手动插入值,插入时用null代替
二、唯一约束
作用:表示某字段的值不能重复
关键字:unique
格式:字段 unique
三、非空约束
作用:表示某字段不能为null
关键字:not null
一般和default搭配使用,给非空字段设定一个默认值
格式:字段 not null default 默认值
距离使用:创建一张员工表(id,name,address,age)设置name不能重复,age不能为null,默认值为0
create table emp(
id int PRIMARY key auto_increment,
name VARCHAR(5) UNIQUE,
age int not null default 0)
四、外键约束
作用:一张表的字段值受到另一张表字段值的约束
关键字:foreign key
语法:[constraint] [外键名称] foreign key (外键字段名) references 主表(主键名);
一张表的字段的值受到另一张表的主键约束
被约束的表叫从表,另一张表叫主表
外键的创建方式:
alter table 表名 add constraint 外键名 foreign key(外键字段名)
references 外表表名(主键字段名)
外键级联:
级联操作:当修改和删除主表主键时,外键应该执行对应的操作。
级联关系:
(1)cascade:当更新或者删除主键时,外键也执行更新或者删除操作
(2)setnull:当更新或者删除主键时,外键自动设置为null
(3)no action:当从表中有匹配的主表的记录时,不允许对主键进行修改或删除
(4)restrice:类似no action
举例:
创建两张表
create table stu(
id int PRIMARY key auto_increment,
name VARCHAR(8),
age int,
course_id int)
CREATE TABLE course(
id int PRIMARY key auto_increment,
name VARCHAR(8),
classname VARCHAR(8))
创建外键
alter table stu add constraint c_id foreign key(course_id) references course(id)
往表中插入数据
设course中的数据为
id name classname
1 java a教室
2 c++ b教室
3 html5 c教室
设往stu中的数据为
id name age course_id
1 张三 18 1
2 李四 20 2
3 王五 21 3
4 赵六 22 4
则赵六的数据会报错,course_id被course表的主键约束,范围只能在1-3