[英]MySQL - How to prevent duplicates using LOAD DATA INFILE
我相信我有一個問題,其中“ LOAD DATA INFILE ... REPLACE INTO TABLE”進程正在刪除/替換重復信息,但是我認為它是通過添加具有更新ID的新記錄來替換數據。
換句話說,如果我有一個看起來像這樣的表:
ID | INFO | DATE | 1 | foo | 2011-12-01 | 2 | bar | 2011-12-01 |
並且我使用LOAD DATA INFILE ... REPLACE嘗試多次插入INFO和DATE字段,作為插入其他表的過程的一部分,最終得到如下所示:
ID | INFO | DATE | 15 | foo | 2011-12-01 | 23 | bar | 2011-12-01 |
因此,發生的事情是,它用新的重復項之一替換了原始數據,然后用新的ID(我認為是最新的ID!)保存了記錄。
這是我用來管理此代碼的代碼:
$sqlDomain = "LOAD DATA LOCAL INFILE '".$csvfile."' REPLACE INTO TABLE sg_domains FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (Domain,@dummy1,@dummy2,@dummy3,@dummy4,@dummy5) SET UserID = ".$UserID;
$sqlDelDupeDoms = "delete t2 from sg_domains as t1, sg_domains as t2 where t1.Domain = t2.Domain and t2.id > t1.id;";
$sqlDelLikeDoms = "delete t2 from sg_domains as t1, sg_domains as t2 where t1.Domain LIKE CONCAT('%',t2.Domain,'%') and t2.id > t1.id;";
@dummy變量用於轉移不需要的字段,避免試圖將其插入到表中,而只需要稍后將CSV文件中的一個字段用於其他INSERT進程即可。 我顯然也使用后兩個命令來“清除”運行中的重復數據和相似數據。
我在正確和/或有效地做到這一點嗎???
任何意見,將不勝感激。
謝謝!!!!!
這就是replace
工作方式。 也許您想insert ... on duplicate key update
insert ignore
或insert ... on duplicate key update
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.