【发布时间】:2012-01-06 21:55:25
【问题描述】:
我正在编写一个附加到 MySQL 数据库的 PHP CSV 导入脚本。我想让用户选择在发现重复项时插入新行或更新它们。
我不能使用 ON DUPLICATE KEY UPDATE 因为该列不能是唯一的,否则当他们想要重复时它不会满足。
我该怎么办?
【问题讨论】:
标签: php mysql key duplicates
我正在编写一个附加到 MySQL 数据库的 PHP CSV 导入脚本。我想让用户选择在发现重复项时插入新行或更新它们。
我不能使用 ON DUPLICATE KEY UPDATE 因为该列不能是唯一的,否则当他们想要重复时它不会满足。
我该怎么办?
【问题讨论】:
标签: php mysql key duplicates
使用 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"
其他一切都变得不必要地复杂。
【讨论】: