繁体   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