我在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"