概述
约束示例
完成以下案例:
create table user (
id int primary key auto_increment comment '主键',
name varchar(10) not null unique comment '姓名',
age tinyint unsigned check ( age > 0 and age <= 120 ) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
) comment '用户表';
外键约束
概念
图中的父表也叫主表,子表也叫从表。
如果某一个表A有一个字段的值来自于另一个表B的主键,那么表A就是子表(从表),表B就是父表(主表)。
添加外键的语法
-- 创建部门表
create table if not exists dept
(
id int auto_increment primary key comment 'ID',
name varchar(50) not null comment '部门名称'
) comment '部门表';
-- 向部门表插入数据
insert into dept (id, name)
values (1, '研发部'),
(2, '市场部'),
(3, '财务部'),
(4, '销售部'),
(5, '总经办');
-- 创建员工表
create table emp
(
id int auto_increment primary key comment 'ID',
name varchar(50) not null comment '姓名',
age tinyint unsigned comment '年龄',
job varchar(20) comment '职位',
salary int comment '薪资',
entrydate date comment '入职时间',
managerid int comment '直属领导id',
dept_id int comment '所属部门id'
) comment '员工表';
-- 向员工表插入数据
insert into emp (id, name, age, job, salary, entrydate, managerid, dept_id)
values (1, '金庸', 66, '总裁', 20000, '2000-01-01', null, 5),
(2, '张无忌', 20, '项目经理', 12500, '2005-12-05', 1, 1),
(3, '杨逍', 33, '开发', 8400, '2008-11-05', 2, 1),
(4, '韦一笑', 40, '开发', 11000, '2003-06-15', 2, 1),
(5, '常遇春', 43, '开发', 10500, '2004-07-05', 3, 1),
(6, '小昭', 25, '测试', 7000, '2009-12-10', 2, 1);
-- 给员工表添加外键
-- (dept_id) 表示将员工表的dept_id字段作为外键字段
-- references dept(id)表示员工表中的外键字段关联自部门表的id字段
alter table emp add constraint fk_emp_dept_id foreign key (dept_id)
references dept(id);
-- 删除员工表中名为fk_emp_dept_id的外键
alter table emp drop foreign key fk_emp_dept_id;
外键的删除和更新操作
-- 添加外键,当父表有删除或更新操作时,子表级联删除和级联更新
alter table emp add constraint fk_emp_dept_id foreign key (dept_id)
references dept(id) on update cascade on delete cascade;