Mysql之foreign key(外键)

Mysql之foreign key(外键)

1.建立表关系:先建立被关联的表,并且保证被关联的字段唯一

# 这个是被关联的表:
create table dep(
            id int primary key,
            name char(16),
            comment char(50)
        )

# 这个是主表:
create table emp(
            id int primary key,
            name char(10),
            sex enum('male','female'),
            dep_id int,
            foreign key(dep_id) references dep(id)
        )

往表格插入内容的顺序:先往被关联表插入记录,再往关联表插入记录。

# 这是被关联表的数据内容
insert into dep values(1,'IT','技术能力有限部门'),(2,'销售','销售能力不足部门'),(3,'财务','花钱特别多部门');

#这是主表数据内容
insert into emp values(1,'egon','male',1),(2,'alex','male',1),(3,'wxx','female',3),(4,'jinximn','male',2);

我们可以先插入主表数据内容试试(也就是第二句insert):运行——报错
在这里插入图片描述
好了我们还是按顺序来,运行后表内被插入内容:
在这里插入图片描述
在这里插入图片描述

删除表内数据数据:
错误的删除方式:

delete from dep where id=3

这样代码运行结果为:
在这里插入图片描述
正确删除方式:

delete from emp where dep_id = 1;  #先删除主表关联的内容
delete from dep where id=1;  # 再删除被关联表的id内容

运行后,我们可以来看看表的内容:
在这里插入图片描述
在这里插入图片描述

当然也有可以不这么麻烦的方式,那就是在建表时候,就对其进行设置,让delete和update进行同步:

create table emp(
            id int primary key,
            name char(10),
            sex enum('male','female'),
            dep_id int,
            foreign key(dep_id) references dep(id)
            on delete cascade
            on update cascade
        )

on delete cascade和on update cascade保证了删除和更新的同步。
在最开始建表时候这样设置,那么刚刚所说错误的方式现在是正确的

更新数据(这个是建立在设置了on update cascade的基础上的哈,不然运行会报错):

update dep set id = 222 where id=2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值