2009-04-21 58 views
1

MySQL似乎沒有對約束進行約束,直到事務實現結束。如果是這樣,在兩個孩子記錄中切換父母的最佳方式是什麼?替換兩個記錄中的外鍵值(唯一)

例如,如果我們有一些用戶可以放置項目的UI插槽,那麼應該如何在用戶插槽中切換項目,因爲項目表中的slotid爲FK,並且項目中的itemId和slotId列具有唯一索引表?

有沒有比使用SET FOREIGN_KEY_CHECKS = 0和事務中的三個更新更好的方法?

[編輯] SlotId是不可空的,不應該給予該項目總是必須在某個位置 - 因此將其設置爲可爲空將意味着放棄語義正確性和重要的安全檢查,只是爲了使一些實現細節更容易。

回答

0

我描述了類似的問題in this post

似乎使NULL'能夠是更小的邪惡,因爲你不必在這種情況下禁用外鍵約束。

1

如果要更新的列可以爲空,然後更新或刪除並插入,則將它們排除。