MySQL-约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类:
1.主键约束:primary key
Ⅰ.创建表时添加非空约束
create table stu(
id int primary key,
name varchar(20)
);
Ⅱ.创建表完成以后添加非空约束
alter table stu modify id int primary key;
Ⅲ.删除非空约束
alter table stu drop primary key;
注意:
①含义:非空且唯一
②一张表只能有一个字段为主键
③主键就是表中记录的唯一标识
2.非空约束:not null
Ⅰ.创建表时添加非空约束
create table stu(
id int,
name varchar(20) not null --name为非空
);
Ⅱ.创建表完成以后添加非空约束
alter table stu modify name varchar(20) not null;
Ⅲ.删除非空约束
alter table stu modify name varchar(20);
3.唯一约束:unique
Ⅰ.创建表时添加唯一约束
create table stu(
id int,
phone_number varchar(20) unique --添加了唯一约束
);
Ⅱ.创建表完成后添加唯一约束
alter table stu modify name varchar(20) unique;
Ⅲ.删除唯一约束
alter table stu drop index phone_number; --注意,删除唯一约束和删除非空约束的方法不一样
注意:在MySQL中,如果添加了唯一约束的表的多个值为null,则不会报错,在这里,null有点像表示的是不确定
4.外键约束:foreign key
Ⅰ.在创建表时,可以添加外键(有外键的表是从表):
create table 表名(
......
外键列
constraint 外键名称 foreign key(外键列名称)references 主表名称(主表列名称)
);
关联两张表的约束:
主表部门表:
create table department(
id int primary key auto_increment,
dep_name varchar(20); --部门名
dep_location varchar(20); --部门地址
);
从表员工表:
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, --外键对应主表的主键
constraint dep_emp_fk foreign key(dep_id) references department(id);
);
Ⅱ.在创建表后,可以添加外键
alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id);
Ⅲ.删除外键
alter table employee drop foreign key emp_dept_fk;
Ⅳ.级联操作:级联就是说,如果相互关联的两个表,关联的部分的从表想要修改成主表中没有的数据,则会报错,关联的部分的主表想要修改从表中没有的数据,也会报错,如果使用级联,则主表修改的数据从表与之相关联的数据也会相应的修改过去,不会报错
只需要在创建表的添加外键的时候(上面的Ⅱ),后面加上on update cascade即可 如:alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id) on update cascade;
如果想要级联删除,则先删除外键,然后在创建表的添加外键的时候(上面的Ⅱ),后面加上on delete cascade即可 如:alter table employee add constraint dep_emp_fk foreign key(dep_id) references department(id) on delete cascade;
级联更新和删除可以都写上,则说明说明你既可以有级联更新的权限也有级联删除的权限,则更新和删除就不会因为主外键约束而修改不了