Php 如何使用加载数据本地填充替换

Php 如何使用加载数据本地填充替换,php,mysql,csv,load-data-infile,Php,Mysql,Csv,Load Data Infile,我有一个脚本,用于将数据从一个数据库迁移到另一个数据库。我已经使用了常规的mysql插入和更新脚本。只是时间太长了 在任何情况下,我已经将所有我想在新数据库中更新的数据转储到csv,我只是担心如果我运行这个脚本,我会得到重复的条目。我没有匹配的“id”,因此无法对下面列出的替换脚本进行比较。我想知道是否有人能告诉我这个脚本看起来是否正确 目前我在新数据库中有数据行,我只想用csv中的新数据覆盖新数据库中的任何字段,如果它们匹配的话。“存档id号”字段是我唯一可以匹配的字段,但它不是主键 有人能向

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

在任何情况下,我已经将所有我想在新数据库中更新的数据转储到csv,我只是担心如果我运行这个脚本,我会得到重复的条目。我没有匹配的“id”,因此无法对下面列出的替换脚本进行比较。我想知道是否有人能告诉我这个脚本看起来是否正确

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

有人能向我开枪吗

如果csv上的存档id号与新数据库中的匹配,我想用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)


(更多信息请参见)

虽然它不是主键,但我假设在
存档的\u id\u编号
上有一个
唯一的
?是的,这是正确的,并且在SKU上有一个唯一的,那么在没有原始表构建和csv代码段的情况下,它应该可以工作。不过,我会先在表的测试副本上运行它……如果有疑问,请创建目标表的副本,然后导入到该副本中。通过这种方式,您可以看到在导入真实数据时会发生什么,而不必冒真实数据的风险。如上所述,你写的看起来不错。
$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
    );
';