我需要更新mySQL數據庫中的一行,但存在約束時不可能這樣做。mySQL更新,同時忽略表約束
約束條件要求兩列的組合是唯一的。
作爲示例,名字和姓氏字段必須是唯一的。一個SHOW CREATE TABLE
用戶可能包含這樣的事情:
UNIQUE KEY `uniquePortTermCode` (`firstname`,`lastname`)
當我嘗試更新,我違反了這個關鍵,所以我得到的錯誤:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Bob-Smith' for key 'uniqueFirstnameLastname'
可以說,我需要交換的名字兩個姓氏相同的用戶。所以我想把鮑勃史密斯設定爲吉姆史密斯,並且我想把吉姆史密斯設定爲鮑勃史密斯。當我嘗試第一個更新語句時,我將遇到唯一的鍵錯誤。
我認爲一個解決方法是SET foreign_key_checks=0
,但作爲變量表明這只是外鍵,而不是唯一鍵,所以我仍然得到錯誤。
我也看到,在mySQL unique_checks
有一個變量,但將其設置爲false仍然不能解決我的問題,我仍然得到錯誤。
有沒有一種方法可以忽略唯一的密鑰,同時執行此操作時不會像滑動拼圖一樣更改數據?
SET foreign_key_checks = 0不會忽略唯一字段。你使用的是什麼數據庫引擎? myISAM或InnoDB?你有沒有試過UNIQUE_CHECKS = 0;禁用鍵? – 2014-11-21 11:13:47
[如何在不違反唯一約束的情況下交換MySQL中兩行的值?](http://stackoverflow.com/questions/11207574/how-to-swap-values-of-two-rows-in-mysql -without-violating-unique-constraint) – piotrm 2014-11-21 11:15:49
是的,這實際上是重複的。我會關閉這個。 – JackalopeZero 2014-11-21 11:17:56