关于多密钥表中特定密钥的重复密钥更新

时间:2010-02-22 23:23:13

标签: mysql

假设我有一张桌子Foo。此表的列IDUniqueCode定义如下:

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
)

2 个答案:

答案 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重复时才会触发。