ON DUPLICATE KEY UPDATE 仅针对主键?

ON DUPLICATE KEY UPDATE only for primary keys?

有没有办法限制 "ON DUPLICAYE KEY UPDATE" 仅在重复键是 table 的 PRIMARY KEY 时触发? (如果冲突是由 UNIQUE KEY 产生的则不是)

例如在下面table:

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

我想仅在 id 列产生冲突时触发更新,并像往常一样抛出错误,以防因唯一键 username.[=19 而发生冲突=]

编辑:

我正在开发一个非常简单的 PHP 框架。以前我有一个方法 save(),它根据调用它的对象上是否存在 id 属性 来区分 INSERTUPDATE

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

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

on duplicate key 触发主键和唯一键。

在你的例子中,主键是一个自动递增的列,所以你不应该插入一个值。期间.

因此,您只需不包括 on duplicate key 子句并从 insert.

中省略 id 即可获得所需的行为