MySQL如何同时删除主外键关联的两张表中的数据

Posted smile-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何同时删除主外键关联的两张表中的数据相关的知识,希望对你有一定的参考价值。

1. 编写目的

介绍一种方法,解决如下问题:如何同时删除两张相关联的表的记录。
比如说表a的外键fk依赖于表a的id,现在我们需要删除id=5的两条数据。

2. 主要方法

为了简单,推荐更改表a的外键设置,设置删除时策略为CASCADE
如下图:(使用工具navicat)

创建这张表的sql语句如下:

DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
  `openid` char(50) NOT NULL DEFAULT '',
  `pk_userid` bigint(20) unsigned DEFAULT NULL,
  `nickname` char(60) DEFAULT NULL,
  `gender` char(10) DEFAULT NULL,
  `city` char(60) DEFAULT NULL,
  `province` char(60) DEFAULT NULL,
  `country` char(60) DEFAULT NULL,
  `avatar_url` char(150) DEFAULT NULL,
  `gmt_create` datetime NOT NULL,
  `gmt_modified` datetime NOT NULL,
  PRIMARY KEY (`openid`),
  KEY `user_info_ibfk_1` (`pk_userid`),
  CONSTRAINT `user_info_ibfk_1` FOREIGN KEY (`pk_userid`) 
  REFERENCES `user` (`pk_userid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

重点关注FOREIGN KEY (pk_userid)
REFERENCES user (pk_userid) ON DELETE CASCADE ON UPDATE CASCADE

这个时候我们需要联合删除时只要删除被依赖的表就可以了,mysql会根据外键依赖关系把两张表的记录都删除。

delete from user where pk_userid = 27;

3. 总结

总而言之是通过更改外键删除时的处理策略来实现的,相对来说比较简单,但是同时也可能会带来某些其他问题。
当然,两个相互关联的表,某张表更新时,另外一张表跟着更新的也应该使用CASCADE策略。

Smileyan 2019年4月20日

以上是关于MySQL如何同时删除主外键关联的两张表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中如何在关联表中查询出其中一个外键不存在的数据?

一文让你彻底理解SQL连接查询

SQL中有主外键的两表到底那这是主表

MySQL进阶 一 主外键讲解

sqlserver删除有主外键的数据

SQL关联两张表查数据,结果只显示一条。