簡體   English   中英

MySQL-如何使用LOAD DATA INFILE防止重復

[英]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 ignoreinsert ... on duplicate key update

http://dev.mysql.com/doc/refman/5.5/en/replace.html

http://dev.mysql.com/doc/refman/5.5/zh-CN/insert.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM