在实现事务结束之前,MySQL似乎没有deffering约束。如果是这样,在两个子记录中切换父母的最佳方法是什么?
例如,如果我们有一些UI插槽,每个用户都可以放置项目。如果在项目表中slotid是FK并且Items表中的itemId和slotId列有唯一索引,那么应该如何切换用户插槽中的项目?
有没有比在事务中使用SET FOREIGN_KEY_CHECKS = 0和三次更新更好的方法呢?
[编辑] SlotId不可为空,不应该给出项目总是必须在某个插槽中 - 所以将其设置为可空将意味着放弃语义正确性和重要的安全检查只是为了使一些实现细节更容易。
答案 0 :(得分:1)
如果要更新的列可以为空,则将它们取出,然后更新,或删除并插入。
答案 1 :(得分:0)
我描述了类似的问题in this post。
似乎使列NULL
'能够是较小的邪恶,因为在这种情况下你不必禁用外键约束。