【问题标题】:INSERT OR UPDATE if record already exists MySQL如果记录已经存在,则插入或更新 MySQL
【发布时间】:2014-12-04 22:36:56
【问题描述】:

我需要编写一个 MySQL 查询来插入或更新一些字段。我见过ON DUPLICATE KEY,但我的字段不是PRIMARY KEYUNIQUE,只有组合是唯一的。这是字段列表:

ID (PRIMARY KEY AUTOINCREMENT BIGINT)、用户 (BIGINT)、创建者 (BIGINT)、类型 (TINYINT)、值 (BIGINT)、日期 (INT)、读取 (TINYINT)、擦除 (TINYINT)。

表名是通知(如果有用的话)。如果用户、创建者、类型、值与要插入的值相同(例如AND),我需要插入新记录或更新现有记录。我该怎么做?

【问题讨论】:

  • 在组合上添加唯一键。一个键可以在多个字段上
  • 如果存在则插入或更新是replace 的用途
  • @Dagon,例如在字段 USER 上使用 UNIQUE,之后我可以插入两行具有相同 USER 值但其他不同的行?
  • er 不,如果您有重复项,这将不是一个唯一字段。
  • 有一种方法可以将 INSERT/UPDATE 与 ON DUPLICATE 用于使用多个 ID 的 UNIQUE 表单元格,来自 SELECT,而其他字段信息是静态的?

标签: php mysql sql


【解决方案1】:

您可以在变量上创建唯一索引。我不确定哪些是有问题的变量,但这里有一个例子:

create unique index idx_table_user_creator_type on table(user, creator, type)

您也可以在create table 语句中执行此操作,使用unique 约束的语法。

然后,您可以将约束用作:

insert into table(user, creator, type, col1, . . .)
    values(@user, @creator, @type, . . .)
    on duplicate key update col1 = values(col1),
                            col2 = values(col2),
                            . . . ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2011-08-21
    • 2018-02-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多