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

时间:2011-11-26 14:04:13

标签: php mysql key duplicates

我正在使用附加到MySQL数据库的PHP中的CSV导入脚本。我想让用户可以选择在找到重复项时插入新行或更新它们。

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

我该怎么做?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

为什么不在表中添加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"

其他一切都变得越来越复杂。