假设我有一张桌子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
)
答案 0 :(得分:2)
这样的东西?
mysql> insert into Foo (Id, UniqueCode) values (3, "bar") on duplicate key update
UniqueCode=IF(UniqueCode='bar','bar','no_unique_dupe');
答案 1 :(得分:0)
我认为我希望的行为是在唯一代码重复的可能性不会发生错误。我已经实现了一个方法来检查在将其插入数据库之前是否存在唯一代码。之后,我插入了行,然后ON DUPLICATE KEY UPDATE
只有在ID
重复时才会触发。