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

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

问题描述:

如何仅在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个组合。

如何仅在列值的确切组合不退出时才插入行?

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”和“client_id”的唯一键。