不可能MySQL插入...选择外键约束错误‽

时间:2016-03-21 07:08:06

标签: mysql sql table-structure

这令我感到困惑,希望有人可以提供帮助。

查询:

insert into `shelter_pages` (`userid`,`relid`)
select :userid, `id` from `shelter` where `stage`='egg' order by rand() limit 30

简单,对吧?取30个满足条件的随机行,并将它们保存在"页面中#34;表以及用户ID。

错误:

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(`db_name` .shelter_pages`,CONSTRAINT`shelter_pages_ibfk_2` FOREIGN KEY(`relid`)REFERENCES` shelter` (`id`)ON DELETE CASCADE ON UPDATE CASCADE)

那怎么可能呢?它确实在`shelter`.`id`查询和SELECT中获取了这些INSERT值,外键检查如何可能失败?

如果它有任何意义,那么该表是相当繁忙的" - 它是游戏元素的一部分,任何玩家都可以采用"从避难所,从而删除行。在我认为原子操作中,这是否与竞争条件一样简单?

1 个答案:

答案 0 :(得分:1)

这可能是因为您将transaction isolation level设置为"脏读" (即READ UNCOMMITTED)。这意味着SELECT可能正在读取未提交的数据,这些数据会在INSERT期间使外键约束失败。