我正在處理一個連接到MySQL數據庫的PHP CSV導入腳本。如果找到重複項或更新它們,我想讓用戶選擇插入新行。重複密鑰更新(非唯一字段)
我不能使用ON DUPLICATE KEY UPDATE,因爲列不能是唯一的,否則當它們想要重複時不會照顧。
我該怎麼辦?
我正在處理一個連接到MySQL數據庫的PHP 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"
一切越來越不必要的複雜性。
我正在考慮這樣做,但它是做到這一點的最有效的方式?如果它是一個特別大的文件,那麼檢查每一行以查看它是否存在似乎效率很低。 – THEK