2009-04-21 36 views
1

MySQL似乎没有对约束进行约束,直到事务实现结束。如果是这样,在两个孩子记录中切换父母的最佳方式是什么?替换两个记录中的外键值(唯一)

例如,如果我们有一些用户可以放置项目的UI插槽,那么应该如何在用户插槽中切换项目,因为项目表中的slotid为FK,并且项目中的itemId和slotId列具有唯一索引表?

有没有比使用SET FOREIGN_KEY_CHECKS = 0和事务中的三个更新更好的方法?

[编辑] SlotId是不可空的,不应该给予该项目总是必须在某个位置 - 因此将其设置为可为空将意味着放弃语义正确性和重要的安全检查,只是为了使一些实现细节更容易。

回答

0

我描述了类似的问题in this post

似乎使NULL'能够是更小的邪恶,因为你不必在这种情况下禁用外键约束。

1

如果要更新的列可以为空,然后更新或删除并插入,则将它们排除。