不可能MySQL插入...select外键约束错误‽
Impossible MySQL insert ... select foreign key constraint error‽
这让我很困惑,希望有人能提供帮助。
查询:
insert into `shelter_pages` (`userid`,`relid`)
select :userid, `id` from `shelter` where `stage`='egg' order by rand() limit 30
很简单吧?随机取30条满足条件的行,和用户id一起保存在"pages"table中
错误:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db_name`.`shelter_pages`, CONSTRAINT `shelter_pages_ibfk_2` FOREIGN KEY (`relid`) REFERENCES `shelter` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
那怎么可能?它实际上是在 SELECT
查询中获取这些 `shelter`.`id`
值并 INSERT
ing 它们,外键检查怎么可能失败?
如果它有任何意义的话,table 是相当 "busy" - 它是游戏元素的一部分,任何玩家都可以 "adopt" 从避难所,从而删除排。这是否像我认为的原子操作中的竞争条件一样简单?
这很可能发生,因为您将 transaction isolation level 设置为 "dirty read"(即 READ UNCOMMITTED
)。这意味着 SELECT
可能正在读取未提交的数据,这些数据在 INSERT
.
期间会导致外键约束失败
这让我很困惑,希望有人能提供帮助。
查询:
insert into `shelter_pages` (`userid`,`relid`)
select :userid, `id` from `shelter` where `stage`='egg' order by rand() limit 30
很简单吧?随机取30条满足条件的行,和用户id一起保存在"pages"table中
错误:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db_name`.`shelter_pages`, CONSTRAINT `shelter_pages_ibfk_2` FOREIGN KEY (`relid`) REFERENCES `shelter` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
那怎么可能?它实际上是在 SELECT
查询中获取这些 `shelter`.`id`
值并 INSERT
ing 它们,外键检查怎么可能失败?
如果它有任何意义的话,table 是相当 "busy" - 它是游戏元素的一部分,任何玩家都可以 "adopt" 从避难所,从而删除排。这是否像我认为的原子操作中的竞争条件一样简单?
这很可能发生,因为您将 transaction isolation level 设置为 "dirty read"(即 READ UNCOMMITTED
)。这意味着 SELECT
可能正在读取未提交的数据,这些数据在 INSERT
.