在重复键上更新复合键

时间:2015-01-21 23:01:23

标签: php mysql syntax

我需要更新新行:date='$dat'empId='$who(作为复合键)。但如果其中一个或两者不同,则插入:

$sql= "INSERT INTO history 
       SET endtimestamp='$now',end='$signature',date='$dat',empId='$who' 
       ON DUPLICATE KEY UPDATE endtimestamp='$now',end='$signature'";

1 个答案:

答案 0 :(得分:2)

从MySQL文档中: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

  

如果指定ON DUPLICATE KEY UPDATE,则插入一行   会导致 UNIQUE索引 PRIMARY KEY 中的重复值,   执行旧行的更新。

主键是个人(每列)。您需要创建包含两列的复合UNIQUE索引,然后更新才能正常工作。

在数据库上运行:

CREATE UNIQUE INDEX unq_employee_id_date ON history (empId, date);