参考:https://blog.csdn.net/baidu_41388533/article/details/108127513
约束的作用
- 对表中的数据进行限制,保证数据的正确性、有效性和完整性。
- 一个表如果添加了约束,不正确的数据将无法插入到表中。
- 约束在创建表的时候添加比较合适。
约束种类
主键
作用
用来唯一标识数据库中的每一条记录
特征
- 通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。
- 主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。
下表中使用id作为主键,一般不使用身份证号、学号等。
创建主键
- 主键关键字: primary key
- 主键的特点:
- 非空 not null
- 唯一
- 创建表的时候创建主键
-- 创建表学生表 st5, 包含字段(id, name, age)将 id 做为主键
create table st5 (
id int primary key,
name varchar(20),
age int
)
- 已有表中增加主键
ALTER TABLE employee ADD PRIMARY KEY(ID)
删除主键
-- 删除 st5 表的主键
alter table st5 drop primary key;
-- 添加主键
alter table st5 add primary key(id);
设置主键自增
在每次插入新记录时,数据库自动生成主键字段的值
-- 指定起始值为 1000
create table st4 (
id int primary key auto_increment,
name varchar(20)
)
auto_increment = 1000;
insert into st4 values (null, '孔明');
select * from st4;
-- 修改起始值
alter table st4 auto_increment = 2000;
- DELETE 和 TRUNCATE 对自增长的影响
DELETE:删除所有的记录之后,自增长没有影响。
TRUNCATE:删除以后,自增长又重新开始
唯一约束
表中不能出现重复的数据
字段名 字段类型 UNIQUE
非空约束
字段名 字段类型 not null
默认值
字段名 字段类型 default 默认值
注意
- 主键数在一个表中,只能有一个。不能出现多个主键。
- 主键可以单列,也可以是多列。
- 自增长只能用在主键上。
外键
- 什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id
- 主表: 一方,用来约束别人的表
- 从表: 多方,被别人约束的表
-- 1) 创建从表 employee 并添加外键约束 emp_depid_fk
-- 多方,从表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
-- 创建外键约束
constraint emp_depid_fk foreign key (dep_id) references department(id)
)
-- 2) 正常添加数据
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
select * from employee;
-- 3) 部门错误的数据添加失败
-- 插入不存在的部门
-- Cannot add or update a child row: a foreign key constraint fails
INSERT INTO employee (NAME, age, dep_id) VALUES ('老张', 18, 6);
- 删除外键
ALTER TABLE 从表 drop foreign key 外键名称;
外键级联
- 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作