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如何同时删除主外键关联的两张表中的数据的主要内容,如果未能解决你的问题,请参考以下文章