有没有一种方法可以限制“ 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
属性的存在来区分UPDATE
和id
。
现在,我使用INSERT INTO ... ON DUPLICATE KEY UPDATE
查询重写了此方法,但是当我尝试插入(例如)一个具有现有username
值的用户时,它将更新该用户而不是抛出错误。
我知道这是正确的行为,我只是想知道是否有办法仅在PRIMARY KEY上实现相同的结果。
答案 0 :(得分:2)
on duplicate key
会同时触发主键和唯一键。
在您的情况下,主键是一个自动递增的列,因此您不应插入值。期间。
因此,只需不包含on duplicate key
子句,并从id
中除去insert
,就可以得到想要的行为。