- 约束
对数据进行限定,保证数据正确性、有效性、完整性
分类:
1. 主键约束 primary key
2. 非空约束 not null
3. 唯一性 unique
4. 外键约束 foreign key
4.1 非空约束
添加方式:
1. 在创建表时添加约束
create table student(
id int,
name varchar(20) not null -- name 为非空
);
删除非空约束:
alter table student modify name varchar(20);
2. 在创建表之后添加非空约束
alter table student modify name varchar(20) not null
4.2 唯一约束
create table people(
id int,
phone varchar(20) unique -- 添加唯一约束(两个null不算重复)
);
唯一约束不能通过以下语句删除:
alter table people modify phone varchar(20);
通过下列语句删除
alter table people drop index phone;
唯一约束也叫唯一索引
在创建表之后添加唯一约束
alter table people modify phone varchar(20) unique;
4.3 主键约束
1. 非空且唯一
2. 一张表只能有一个字段是主键
3. 表中记录的唯一标识码
创建表时添加主键
create table student(
id int primary key,
name varchar(20) not null
);
删除主键,不能通过下列语句删除:
alter table student modify id int;
正确的方式
alter table student drop primary key;
在创建表之后添加主键
alter table student modify id int primary key;
自动增长:(一般和主键连在一起使用)
create table student(
id int primary key auto_increment,
name varchar(20) not null
);
insert into student values(null,"ccc");
给null自动增长,也可以手动委派,自动增长基于上一条
删除自动增长
alter table student modify id int;
添加:
alter table student modify id int auto_increment;
4.4 外键约束
让表与表中的数据产生关联
在创建表时可以添加
语法:
外键列 ,
constraint 外键名称 foreign key (外键列名称) references 主表名称(主列表名称) 级联操作
create table employee(
id int primary key auto_increment,
name varchar(20),
dep_id int, -- 外键对应主表的主键
constraint emp_dept_fk foreign key (dep_id) references department(id)
);
【constraint 外键名称】 可以省略
删除外键:
alter table employee drop foreign key emp_dept_fk;
在创建表之后添加外键:
alter table employee add constraint emp_dept_fk foreign key (dep_id) references department(id);
级联操作:
添加外键时设置级联:
在添加外键的语法最后:
1. 级联更新
on update cascade
2. 级联删除
on delete cascade
外键链接链接的数据被删除,主表中的数据也被删除
alter table employee add constraint emp_dept_fk foreign key (dep_id) references department(id) on update cascade on delete cascade
4.5 多表关系
1. 一对一关系
2. 一对多的关系
3. 多对多的关系
借助中间表,至少包含两个字段,这两个字段作为外键,分别指向两个表的主键(联合主键)
create table tab_fav(
rid int,
uid int,
date datetime,
primary key(rid,uid), -- 创建复合主键,联合主键(两个不能重复)
foreign key (rid) references tab_route(rid),
foreign key (uid) references tab_user(uid)
);