如果列不唯一,如何更新重复键?
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
但上面的 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
约束不必限于单个列。
您可以像这样更改 table:
ALTER TABLE `yourTableName` ADD UNIQUE `unique_index`(`employee_id`, `client_id`);
How can I only insert the row only if the exact combination of column values doesnt exit?
为此,您必须使用列 "employee_id" 和 "client_id" 创建一个唯一键。
如何仅在两行值不完全相同时才插入?这是我的场景,所以我的问题是有道理的:
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
约束不必限于单个列。
您可以像这样更改 table:
ALTER TABLE `yourTableName` ADD UNIQUE `unique_index`(`employee_id`, `client_id`);
How can I only insert the row only if the exact combination of column values doesnt exit?
为此,您必须使用列 "employee_id" 和 "client_id" 创建一个唯一键。