mysql - ON DUPLICATE KEY UPDATE 仅针对主键?

标签 mysql sql sql-update primary-key unique-key

有没有办法限制“ON DUPLICAYE KEY UPDATE”仅在重复键是表的主键时触发? (如果冲突是由 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()区分 INSERTUPDATE基于 id 的存在调用它的对象的属性。

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

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

最佳答案

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

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

因此,您只需不包括 on duplicate key 子句并从 insert 中省略 id 即可获得所需的行为.

关于mysql - ON DUPLICATE KEY UPDATE 仅针对主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51144683/

相关文章:

php - MySql查询根据价格得到相似的结果

php - MySQL数据库表中找不到数据,如何编写php代码?

mysql - SQL DDL : Recursive table with two foreign keys (MySQL)

c# - 如何在 C# 中使用 LINQ 更新对象列表的单个项目

c# - Entity Framework 核心。如何正确更新相关数据?

mysql - 使用 Mysql 检索最后插入的 id

mysql - VB.Net 与 mySql 问题?

java - 实体表未映射

php - 如何连接具有多个公共(public)字段的两个表以进行搜索过滤器

mysql:一次性更新一列?