在重复键更新(非唯一字段)


On Duplicate Key Update (Non unique field)

我在PHP附加到MySQL数据库的CSV导入脚本工作。我想给用户一个选项,要么插入新行,如果发现重复或更新它们。

我不能使用ON DUPLICATE KEY UPDATE,因为列不能是唯一的,否则当他们想要重复时,它将无法满足。

我该怎么做呢?

使用2个查询-一个选择查询来确定行是否存在,然后根据该结果执行插入或更新查询。

我会编写脚本以便在命令行中使用。在循环中,检查具有相同键的条目是否已经存在。如果是,提示用户决定使用fgets(STDIN)做什么。

为什么不直接添加一个UNIQUE键到表中,可能跨越多个字段?下面是一个简单电话簿表的例子:

CREATE TABLE phonebook (
    firstname VARCHAR(255),
    lastname VARCHAR(255),
    home VARCHAR(50),
    mobile VARCHAR(50)
)

你可以很容易地添加一个键使名字和姓氏在一起唯一。

ALTER TABLE phonebook ADD UNIQUE (firstname, lastname)

这样,当名字已经在列表中时,您可以使用ON DUPLICATE KEY UPDATE语句轻松更新电话号码:

INSERT INTO phonebook (firstname, lastname, home, mobile) 
VALUES ("john", "doe", "12345", "45678")
ON DUPLICATE KEY UPDATE home = "12345", mobile = "45678"