我相信我有一个问题,“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进程。我显然也使用后面的两个命令来“清理”dupe和类似/类似的数据。
我是否正确和/或有效地这样做了?
任何建议都将受到赞赏。
感谢!!!!!
答案 0 :(得分:0)
这就是replace
的工作方式。也许你想要insert ignore
或insert ... on duplicate key update
?