假設我有一個表Foo
。此表有ID
和UniqueCode
像這樣定義的列:關於多鍵表中特定鍵的重複鍵更新
CREATE TABLE Foo
(
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
UniqueCode VARCHAR(255) NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT UNIQUE(UniqueCode)
);
現在讓我們假設我有以下查詢:
INSERT INTO Foo (ID, UniqueCode) VALUES ($id, $uniqueCode)
ON DUPLICATE KEY UPDATE UniqueCode = $uniqueCode;
在這種情況下,我想ON DUPLICATE KEY UPDATE
只有火,如果ID
是一個重複,但不是當UniqueCode
是重複的。我意識到這將導致一個唯一的鍵約束錯誤。我的第一個想法是首先檢查並確認$uniqueCode
是否正在使用,如果是,則更改它。有什麼方法可以在MySQL語句中指定它嗎?
編輯:在僞什麼,我想有是:
INSERT INTO Foo(ID, UniqueCode) VALUES ($id, $uniqueCode)
ON DUPLICATE KEY UPDATE
(
IF (duplicate key is ID)
update uniqueCode = $uniqueCode where ID = $id
ELSE // i.e. the duplicate key was UniqueCode and not the ID column
do nothing
)