Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果列不唯一,如何更新重复键?_Php_Mysql_Pdo_Sql Update_Sql Insert - Fatal编程技术网

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

Php 如果列不唯一,如何更新重复键?,php,mysql,pdo,sql-update,sql-insert,Php,Mysql,Pdo,Sql Update,Sql Insert,如何仅在两行值不完全相同时插入?以下是我的情景,因此我的问题很有意义: ID employee_id client_id 1 1 10 2 2 11 3 1 11 4 2 10 我想在PDO中的列中插入如下内容: insert into yourTableName (employee_id, c

如何仅在两行值不完全相同时插入?以下是我的情景,因此我的问题很有意义:

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。。。在重复密钥更新时…
需要唯一密钥。唯一键可以位于多个列上。只需在两列(员工id、客户id)上创建多列唯一键即可


使用
INSERT有一个警告。。。在重复密钥更新时…
。在默认设置下,如果
ID
是一个自动递增列,则每次调用
INSERT。。。在重复密钥更新时…
即使它只是更新,因为下一个id是首先生成的。如果这是一个问题,您应该在事务中使用
SELECT FOR UPDATE
,以查看记录是否存在,然后相应地进行操作。

唯一的
约束不必限制为单个列。 您可以这样更改您的表:

ALTER TABLE `yourTableName` ADD UNIQUE `unique_index`(`employee_id`, `client_id`);
如何仅在列值的精确组合不存在时插入行

要做到这一点,您必须创建一个包含列“employee\u id”和“client\u id”的唯一键