如果记录相同则更新SQL行

时间:2013-09-25 18:52:55

标签: php mysql insert-update

在MySQL中,我有一个像这样的tblProject -

Project_ID Field_ID     Record_ID Label
556895     1            1         Office desk 1
556895     1            2         Office desk 2
556895     2            1         This is a desk 1
556895     2            2         This is a desk 2
472246     1            1         Hello 1
472246     1            2         Hello 2
472246     2            1         This is a wooden desk 1
472246     2            2         This is a wooden desk 2

我使用sql查询(用PHP编写),它将插入一个像这样的值 -

$sql_query = "INSERT INTO Items (Project_ID, Field_ID, Record_ID, Label) VALUES ('232323', '3', '3', 'New Label')";

它正常工作。但是如果所有三个'Project_ID','Field_ID'和'Record_ID'相同,我需要更新'Label' - 如果任何一个不同,我需要插入新记录。

从记录结构中可以明显看出,此处不能选择Unique / Primary。

2 个答案:

答案 0 :(得分:5)

为什么独特不是一种选择?只需为这三个字段创建它。

然后您可以使用ON DUPLICATE KEY UPDATE语法。

答案 1 :(得分:3)

您可以使用INSERT...ON DUPLICATE KEY UPDATE。但在函数正常工作之前,您需要在表上强制使用唯一键。

在这种情况下,您需要在三列上使用UNIQUE

ALTER TABLE Items ADD CONSTRAINT Items_uq 
UNIQUE (Project_ID, Field_ID, Record_ID)

并发表此声明,

INSERT INTO Items (Project_ID, Field_ID, Record_ID, Label) 
VALUES ('232323', '3', '3', 'New Label')
ON DUPLICATE KEY UPDATE
   Label = 'New label'