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

时间:2011-12-22 20:42:47

标签: php mysql

我相信我有一个问题,“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和类似/类似的数据。

我是否正确和/或有效地这样做了?

任何建议都将受到赞赏。

感谢!!!!!

1 个答案:

答案 0 :(得分:0)

这就是replace的工作方式。也许你想要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/en/insert.html