ON DUPLICATE KEY UPDATE仅适用于主键?

问题描述 投票:3回答:1

有没有办法限制“ON DUPLICATE KEY UPDATE”仅在重复键是表的PRIMARY 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()区分INSERTUPDATE基于id属性在它被称为对象的存在。

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

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

mysql sql sql-update primary-key unique-key
1个回答
2
投票

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

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

因此,您可以通过简单地不包括on duplicate key子句并从id中省略insert来获得您想要的行为。

© www.soinside.com 2019 - 2024. All rights reserved.