一、约束
指对数据进行限制,来保证数据的完整性 有效性 正确性
「常见约束」
约束 | 英文名 |
主键约束 | primary key |
唯一约束 | unique |
非空约束 | not null |
外键约束 | foreign key |
1、主键约束
特点:不可重复 唯一 非空
作用:用来表示数据库中的每一条记录
语法格式:
字段名 字段类型 primary key
主键自增:
关键字:auto_increment 主键自动增长(字段类型必须是整数类型)
1# 创建一张带有主键的表
--方式一
create table emp2(
eid int primary key,
ename varchar(20),
sex char(1)
);
desc emp2; --查看表结构
drop emp2; --删除表
--方式二
create table emp2(
eid int,
ename varchar(20),
sex char(1),
primary key(eid) --指定eid为主键
);
drop emp2;
--方式三
create table emp2(
eid int,
ename varchar(20),
sex char(1)
);
--通过DDL语句添加主键
alter table emp2 add primary key(eid);
2# 删除主键
alter table emp2 drop primary key;
3# 创建自增的表
create table emp2(
eid int primary key auto_increment,
ename varchar(20),
sex char(1)
);
4# 修改自增起始值
create table emp2(
eid int primary key auto_increment,
ename varchar(20),
sex char(1)
)auto_increment=100; --自增从100开始
delete和truncate对自增的影响
delete:删除表中所有数据,将表中数据逐条删除,对自增没有影响
truncate:删除表中所有数据,是将整个表删除,在创建一个相同结构的表
「delete删除」
delete from emp2; --逐条删除表中记录,不影响主键自增
「truncate删除」
truncate table emp2; --删除正常表,重新创建一张表,自增从新开始
2、非空约束
特点:某一列不允许为空
语法格式:
字段名 字段类型 not null
1# 创建非空字段的表
create table emp2(
eid int primary key auto_increment, --主键自增
ename varchar(20) not null, --非空
sex char(1)
);
3、唯一约束
特点:表中的某一列不能重复(对null值 不做唯一判断)
语法格式:
字段名 字段类型 unique
1# 创建emp2表为ename添加唯一约束
create table emp2(
eid int primary key auto_increment, --主键约束
ename varchar(20) unique, --唯一约束
sex char(1)
);
主键约束与唯一约束的区别
主键约束:唯一并且不能为空
唯一约束:唯一可以为空
一个表中只能有一个主键,但是可以有多个唯一约束
4、默认值
特点:用来指定某一列的默认值
语法格式
字段名 字段类型 default 默认值
1# 创建emp2表 指定sex默认值为女
create table emp2(
eid int primary key, --主键
ename varchar(20),
sex char(1) default '女' --指定默认值
);
5、外健约束
作用:外健约束可以让两表之间有一个对应关系,保证了主从表饮用的完整性
外健:指的是在从表中与主表主键对应的字段
主表:主键id所在的表,一的一方
从表:外健字段所在的表,多的一方
注意:
从表的外健类型必须要与主表的主键类型一致
添加数据应该先添加主表的数据再添加从表的数据
删除数据要先删除从表数据再删除主表数据
添加外健语法格式
「创建表的时候添加外健」
create table 表名(
字段...
[constraint] [外健约束名] foreign key(外健字段名) references 主表(主键字段)
--两个方括号的可以省略掉
);
1# 创建员工表 添加外健
create table employee(
eid int primary key auto_increment, --主键
ename varchar(20),
age int,
dept_id int,
constraint emp_dept_fk foreign key(dept_id) references department(id)--添加外健约束
);
2# 创建员工表之后 添加外健
create table employee(
eid int primary key auto_increment,
ename varchar(20),
age int,
dept_id int
);
--方式一 自己指定外健名称
alter table employee add constraint emp_dept_fk foreign key(dept_id) references department(id);
--方式二 默认生成名为employee_ibfk_1
alter table employee add foreign key(dept_id) references department(id);--添加外健
6、删除外健约束
语法格式
alter table 表明 drop foreign key 外健约束名称;
1# 删除employee表中的外健
alter table employee drop foreign key emp_dept_fk; --删除外健约束
7、级联删除
删除主表数据的同时,可以删除与之关联的从表中的数据
语法:on delete cascade
1# 创建员工表创建外健 并添加级联删除
create table employee(
eid int primary key auto_increment,
ename varchar(20),
age int,
dept_id int,
constraint emp_dept_fk foreign key(dept_id) references department(id)
on delete cascade --添加级联删除
);
2# 删除部门编号为2的数据
delete from department where id=2;