【问题标题】:How to Update on Duplicate Key if the columns are not unique?如果列不唯一,如何更新重复键?
【发布时间】:2015-06-07 20:38:13
【问题描述】:

仅当 2 行值不完全相同时如何插入?这是我的场景,所以我的问题是有道理的:

ID      employee_id     client_id
1           1              10
2           2              11
3           1              11
4           2              10

我想在 PDO 的列中插入这样的内容:

insert into yourTableName (employee_id, client_id)
    values (:employee_id, :client_id)
    on duplicate key update 
        employee_id=:$employee_id2, client_id=:client_id2

但上面的insert on duplicate 似乎只有在其中一列是唯一的情况下才有效。在我的例子中,employee_id 和 client_id 中的值不是唯一的,这些值可以重复多次。但是只能有 1 个组合。

只有当列值的确切组合不存在时,我才能仅插入行?

【问题讨论】:

    标签: php mysql pdo sql-update sql-insert


    【解决方案1】:

    INSERT ... ON DUPLICATE KEY UPDATE ... 需要唯一的密钥。唯一键可以在多个列上。只需在两列(employee_id、client_id)上创建一个多列唯一键。

    使用INSERT ... ON DUPLICATE KEY UPDATE ... 有一个警告。在默认设置下,如果ID 是一个自动递增列,则每次调用INSERT ... ON DUPLICATE KEY UPDATE ... 时计数器都会递增,即使它只是更新,因为首先生成下一个id。如果这是一个问题,您应该在事务中使用SELECT FOR UPDATE 来查看记录是否存在,然后采取相应的行动。

    【讨论】:

      【解决方案2】:

      UNIQUE 约束不必局限于单个列。 你可以像这样改变你的表:

      ALTER TABLE `yourTableName` ADD UNIQUE `unique_index`(`employee_id`, `client_id`);
      

      【讨论】:

        【解决方案3】:

        只有当列值的确切组合不存在时,我才能只插入行?

        为此,您必须创建一个包含“employee_id”和“client_id”列的唯一键。

        【讨论】:

          猜你喜欢
          • 2014-01-12
          • 2013-09-07
          • 1970-01-01
          • 1970-01-01
          • 2023-02-16
          • 2014-03-01
          • 2018-09-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多