MySQL约束(下) 外键约束

首先 我们要知道 什么叫外键

数据库表之间是可以建立关联关系的
比如 我们有一个部门表和一个员工表
每个员工都会有属于自己的部门

这个时候我们就可以用外键

我们就来模拟这种情况

先来建一个部门表 参考代码如下

CREATE TABLE IF NOT EXISTS `department`(
   `id` int primary key auto_increment,
   `name` VARCHAR(200) not null unique
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述
这样我们的一张部门表就建好了

然后我们加四个部门

INSERT INTO `department`(`name`)
VALUES("开发部");
INSERT INTO `department`(`name`)
VALUES("技术部");
INSERT INTO `department`(`name`)
VALUES("市场部");
INSERT INTO `department`(`name`)
VALUES("人事部");

在这里插入图片描述
然后我们来创建一个员工表

CREATE TABLE IF NOT EXISTS `staff`(
   `id` int primary key auto_increment,
   `name` VARCHAR(200) not null unique,
   `age` int(65) check (age > 0 and age < 120),
   `status` VARCHAR(200) default "1",
   `departmentid` int(200)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

运行之后我们的员工表就出来了
在这里插入图片描述
大家应该注意到了 我们这里有一个 departmentid 这个就是员工表的外键 同时也要对应着 部门表的主键id

当然 就这样创建出来他们之间是没有任何关联的 其中就有两种情况

第一种是 你添加一个用户 给他的部门外键根本就不存在

另一种就是 你创建了一个技术部 这个技术部的主键对应了几个员工的外键 结果你直接给技术部这条数据删了
那么和技术部关联的员工数据就有问题了 所以我们要给他加一个外键约束

然后我们给他们创建外键

alter table staff add constraint employee_foreignkey foreign key (departmentid) references department(id)

然后我们的外键就已经创建

创建外键的基本语法就是

alter table 需要保存外键的表 add constraint 外键名 foreign key (外键在表中的字段名) references 外键需要关联的表(关联的字段)

然后我们将员工表加一条数据

INSERT INTO `staff`(`name`,`age`,`status`,`departmentid`)
VALUES('赵敏',20,"1",1);

运行之后去看staff表
在这里插入图片描述
没有任何问题 他的departmentid为1 关联的开发部

那如果我这里创建一个没有的部门外键呢
编写代码如下

INSERT INTO `staff`(`name`,`age`,`status`,`departmentid`)
VALUES('张无忌',20,"1",5);

运行之后就会报错 [Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (test.staff, CONSTRAINT employee_foreignkey FOREIGN KEY (departmentid) REFERENCES department (id))
就是在告诉你 这个外键是不存在的 首先
外键的作用第一个就是 你存的数据必须关联外键表中的一条数据 如果系统找不到 就会直接报错

其次就是我们来看删除

delete FROM `department` WHERE id like 2;

这里我们删了部门表 主键id为2的数据
在这里插入图片描述
然后我们再来这个有外键关联的 1 开发部

delete FROM `department` WHERE id like 1;

此时我们控制台就会报错
[Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails (test.staff, CONSTRAINT employee_foreignkey FOREIGN KEY (departmentid) REFERENCES department (id))

说明被外键绑定的数据也是不能删除的

不过你把用户表中关联他的数据删了 那么这条数据就可以删除了 只要没有数据用外键关联他 他就可以删

当然 外键也是可以返回的 我们可以删除外键
语法就是 alter table 表名 drop foreign key 外键名

alter table staff drop foreign key employee_foreignkey

执行这段代码就能取消我们刚才创建的外键

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值