如果列不是唯一的,如何更新重复键?
问题描述:
如何仅在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”的唯一键。