【发布时间】:2014-01-25 21:11:52
【问题描述】:
我有一个脚本,用于将数据从一个数据库迁移到另一个数据库。我已经通过使用常规的 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)
;';
感谢您的帮助!!!
【问题讨论】:
-
虽然它不是主键,但我认为
archived_id_number上有一个UNIQUE? -
是的,没错,sku上有唯一性
-
那么它应该可以在没有原始表构建和 csv sn-p 的情况下工作。我会先在表的测试副本上运行它...
-
如有疑问,创建目标表的副本,然后导入该副本。通过这种方式,您可以看到当您真正导入时会发生什么,而不会冒真实数据的风险。如前所述,您所写的内容看起来不错。
标签: php mysql csv load-data-infile