[英]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.