如果列不是唯一的,如何在重复键上更新


How to Update on Duplicate Key if the columns are not unique?

如何仅在两行值不完全相同时插入?这是我的场景,所以我的问题有意义:

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

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

如何仅在列值的精确组合不存在的情况下插入行?

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

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

UNIQUE约束不必局限于一列。你可以这样修改你的桌子:

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

如何仅在列值的精确组合不存在的情况下插入行?

要做到这一点,您必须同时创建一个列为"employee_id"answers"client_id"的唯一键。