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