ON DUPLICATE KEY UPDATE仅适用于主键吗?

时间:2018-07-02 23:05:45

标签: mysql sql sql-update primary-key unique-key

有没有一种方法可以限制“ ON DUPLICAYE KEY UPDATE”仅在重复键是表的PRIMARY KEY时才触发? (如果冲突是由UNIQUE KEY生成的,则不会)

例如,在下表中:

CREATE TABLE users (
    id INT(16) UNSIGNED AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    PRIMARY KEY (id),
    UNIQUE (username)
);

我只想在id列产生冲突的情况下触发更新,并像往常一样引发错误,以防由于唯一键username而发生冲突。

修改

我正在研究一个非常简单的PHP框架。以前,我只有一个方法save(),该方法根据调用对象的INSERT属性的存在来区分UPDATEid

现在,我使用INSERT INTO ... ON DUPLICATE KEY UPDATE查询重写了此方法,但是当我尝试插入(例如)一个具有现有username值的用户时,它将更新该用户而不是抛出错误。

我知道这是正确的行为,我只是想知道是否有办法仅在PRIMARY KEY上实现相同的结果。

1 个答案:

答案 0 :(得分:2)

on duplicate key会同时触发主键和唯一键。

在您的情况下,主键是一个自动递增的列,因此您不应插入值。期间。

因此,只需不包含on duplicate key子句,并从id中除去insert,就可以得到想要的行为。