Mysql的外键

一、创建主表

create table  if not EXISTS staff(
staff_id INT PRIMARY key,
department varchar (50)
);
INSERT into staff values(1,'software');
INSERT into staff values(2,'hr');
INSERT into staff values(5,'electric');

在这里插入图片描述
主表中的主键是staff_id ;
二、创建子表

create table  if not EXISTS staff_info(
identify_id int primary key,
id int  null  ,
staff_name varchar(50),
foreign key(id) REFERENCES staff(staff_id)
);
insert into staff_info values(12345,1,'lilei');
insert into staff_info values(14578,2,'wangmin');
insert into staff_info(identify_id,staff_name) values(14324,'xiaochen');--子表中外键所在的列可以为空,但是主键列不能为空

insert into staff_info values(14689,3,‘chenxiao’);–子表中外键列的值必须在主表中列存在

在这里插入图片描述

DELETE from staff where staff_id=1;--无法删除主表中已经被子表引用的行
DELETE from staff where staff_id=5;--可以删除主表中没有被子表引用的行

1)子表staff_info中的外键是id这列,该外键和主表staff中的主键staff_id 相关联;
2)外键id中的值可以为空;
3)外键id中的非空值必须是主表中主键staff_id 中的某个值,这里可以发现id等于3时会提示数据插入错误;
4)删除主表中的id时,如果该id的值没有被子表引用就可以删除,比如id=5的行可以删除;
5)删除主表中的id时,如果该id的值被子表引用就不能删除;
6)更新主表中非主键列是被允许的,例如:

UPDATE staff set department='it' where department='hr';

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值