mysql 外键约束不起作用,mysql – 外键约束的不一致荣誉

我们有以下架构(为便于阅读而简化):

CREATE TABLE `group` (

`id` int(11) NOT NULL AUTO_INCREMENT,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `device` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`group_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `group_id` (`group_id`),

CONSTRAINT `device_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们的自动化测试会创建一个引用现有组的设备,然后尝试删除该组,该组由于默认的ON DELETE RESTRICT子句而失败:

Error 1451: Cannot delete or update a parent row: a foreign key constraint fails

(`device`, CONSTRAINT `device_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `group`

(`id`))

但是,尽管存在外键约束,但大约25%的时间内,组的删除成功.这导致数据不一致,其中我们有一个设备行引用不存在的group_id.

> MySQL版本是5.7.10,运行官方Docker镜像

>表格是InnoDB

> FOREIGN_KEY_CHECKS设置为1

为什么外键约束的执行可能不一致?

解决方法:

标签:mysql

来源: https://codeday.me/bug/20190710/1429035.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值