繁体   English   中英

如何使用LOAD DATA LOCAL INFILE REPLACE

[英]How To Use LOAD DATA LOCAL INFILE REPLACE

我有一个脚本,我用来将数据从一个数据库迁移到另一个数据库。 我已经使用常规的mysql插入和更新脚本这样做了。 它只需要太长时间。

在任何情况下,我都将我要在新数据库中更新的所有数据转储到csv,我只是担心如果我运行这个脚本,我将获得重复的条目。 我没有匹配的“id”,因此我无法对下面列出的REPLACE脚本进行比较。 我想知道是否有人能够让我了解这个脚本是否正确。

目前我在新数据库中有数据行,我只想用csv中的这些新数据覆盖新数据库中的任何字段(如果它们匹配)。 “archived_id_number”字段是我可以匹配的唯一字段,但它不是主键。

有人可以向我开枪:

如果csv上的archived_id_number与新数据库中的数据匹配,我想用csv中的数据替换字段中的任何数据。 如果没有匹配,我想将数据作为新行插入。

$sql = '
LOAD DATA LOCAL INFILE "'.$theFile.'" 
REPLACE INTO TABLE Product 
FIELDS TERMINATED BY "|" 
LINES TERMINATED BY "\\n"
(archived_id_number, sku, name, upc, account_id, shippingBox_id, unit_cost, supplier_id, description, productLength, productWidth, productHeight)
;';

谢谢你的帮助!!!

作为我的评论的详细说明,虽然您的查询看起来很好,但我建议您针对当前表的副本进行测试。 这样您就可以确切地确认将会发生什么,而不会冒现有数据的风险。 你可以通过执行以下3个查询来实现这一点(显然是在php中执行$ sql)。

$sql = '
    CREATE TABLE `_test_Product` LIKE Product; 
';

$sql = '
    INSERT `_test_Product` SELECT * FROM Product;
';

$sql = '
    LOAD DATA LOCAL INFILE "'.$theFile.'" 
    REPLACE INTO TABLE `_test_Product`
    FIELDS TERMINATED BY "|" 
    LINES TERMINATED BY "\\n"
    (
        archived_id_number, 
        sku, name, upc, account_id, shippingBox_id, unit_cost, 
        supplier_id, description, productLength, productWidth, productHeight
    );
';

(更多信息可用于复制MySQL表,索引和数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM