2

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

Project_ID Field_ID Record_ID 标签
556895 1 1 办公桌 1
556895 1 2 办公桌 2
556895 2 1 这是一张桌子 1
556895 2 2 这是一张桌子 2
472246 1 1 你好 1
472246 1 2 你好 2
472246 2 1 这是一张木桌 1
472246 2 2 这是一张木桌 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”都相同,我需要更新“标签”——如果任何一个不同,则插入为新记录。

从记录结构中可以明显看出,唯一/主要在这里不是一个选项。

4

2 回答 2

5

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

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

于 2013-09-25T18:54:40.333 回答
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'
于 2013-09-25T18:56:46.310 回答