有没有办法限制“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()
区分INSERT
和UPDATE
基于id
属性在它被称为对象的存在。
现在我使用INSERT INTO ... ON DUPLICATE KEY UPDATE
查询重写了这个方法,但是当我尝试插入(例如)具有已存在的username
值的用户时,它会更新该用户而不是抛出错误。
我知道这是正确的行为,我只是想知道是否有办法只在PRIMARY KEY上实现相同的结果。
on duplicate key
触发主键和唯一键。
在您的情况下,主键是一个自动递增的列,因此您不应插入值。期。
因此,您可以通过简单地不包括on duplicate key
子句并从id
中省略insert
来获得您想要的行为。