我有一個表,其中包括一個ENUM字段。我希望ENUM的一個特定值需要參考ID列的唯一性。所以我們可以說我有這樣的:MySQL信號重複鍵錯誤
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`type` ENUM('single','multi') NOT NULL,
`refid` INT UNSIGNED NOT NULL,
`extra` TEXT,
PRIMARY KEY (`id`)
我想(type,refid)
是唯一的關鍵,但只有當type
是single
。這不能用傳統的按鍵完成,所以我想我會使用觸發器來檢測插入行,檢查type='single'
,查找與type='single' and refid=new.refid
一行,並且如果找到了一個重複的條目錯誤。
我使用的是MySQL 5.5,所以SIGNAL SQLSTATE
對我有用。我可以使用它來觸發重複鍵錯誤,以便處理查詢的ON DUPLICATE KEY UPDATE
部分,如果是這樣,怎麼辦?
作爲一種替代方法,我可以更新Trigger中的行並返回一個通用的錯誤條件,但我認爲ON DUPLICATE KEY UPDATE
工作起來會更好(或至少更直觀)。
我不認爲這會觸發'重複密鑰更新' –
這將在'UPDATE'和'INSERT'之前運行。 – Sahal
我認爲不是。事實上,這會觸發語法錯誤。兩次,如果我沒有弄錯。 –