概述
约束示例
完成以下案例:
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;