从 CSV 同步表?

sync table from a csv?

提问人:Phaelax z 提问时间:11/16/2023 更新时间:11/16/2023 访问量:25

问:

我有一个 CSV,我想与现有表同步。如果未找到键,则应使用 CSV 中的值更新表或插入新行。这可能吗?除了简单地导入 csv 之外,我似乎找不到任何东西。我唯一能想到的就是用另一种语言编写脚本,逐行查看 csv,并以这种方式检查每一行。有没有办法只用一个sql脚本来实现这一点?

玛丽亚德 -10.2

评论

0赞 Georg Richter 11/16/2023
更新时间:10.2 已达到 EOL。也许您还想分享有关csv文件的信息:它是存储在客户端还是服务器上?
0赞 Phaelax z 11/17/2023
一旦我们转移到 rhel9,我们就会升级,仍然在 cent7 上。它不是面向客户的服务器。csv 由我的 powershell 脚本生成,用于转储 AD 用户。

答:

0赞 Tangentially Perpendicular 11/16/2023 #1

如果在具有唯一索引或主键的表上使用,则将插入新记录。LOAD DATA INFILE

可以通过以下三种方式之一处理重复项:

  • 使用 关键字,会将整行替换为 传入数据REPLACE
  • 使用关键字将丢弃传入的 排。IGNORE
  • 对于这两个关键字,重复项将引发错误并停止。LOAD

如果您想要更好地控制如何处理重复项(例如,仅更新现有行中的一列),则需要编写一些内容来读取 CSV 文件并逐行插入行。

参考: https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-error-handling

评论

0赞 Phaelax z 11/16/2023
CSV 是否必须匹配相同数量的列?我想我可以使用 REPLACE,除了我从 csv 中排除的一列。
0赞 Tangentially Perpendicular 11/16/2023
不。您可以完全像以前一样将 CSV 字段映射到列。该选项将使用表定义中列的默认值或您在地图中专门为其输入的任何值,为其找到的任何重复项创建新行。您可以在我链接的页面上找到所有详细信息。REPLACE
0赞 Phaelax z 11/17/2023
我已经解决了,谢谢。