如果列不唯一,如何更新重复键?

时间:2015-04-02 19:08:11

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

如果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种组合。

如果列值的确切组合没有退出,我怎么才能只插入行?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

UNIQUE约束不必限于单个列。 您可以像这样更改表格:

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

答案 2 :(得分:1)

  

如果列值的确切组合没有退出,我怎么才能只插入行?

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