mysql - LOAD DATA INFILE 用于同时将数据插入两个表中?

标签 mysql csv file-io concurrency load

我有一个包含超过 100k 条记录的 CSV 文件,我需要将某些字段插入到一个表中,并将其余字段插入到另一个表中。

我知道我可以一个接一个地编写两个 LOAD DATA INFILE 查询来得到这个,我尝试过,它也工作得很好。但我想知道是否可以执行以下操作:

  1. 从 csv 文件中读取一行。
  2. 取出某些记录,将它们插入表 A。将剩余的记录插入表 B。
  3. 阅读下一行。重复 2。

这可能吗?我知道 MySQL 中的并发性对系统来说确实很折磨人,但我想知道我的所有选项。

最佳答案

无法使用LOAD DATA INFILE进行行过滤。

但是,您可以使用 grepawk 创建一个小型 shell 脚本来解析您的文件并仅插入与您的条件匹配的记录:

cat file.txt |
  awk '/\t.+/' |
    mysql -u your_username -pyour_password \
      -e "LOAD DATA LOCAL INFILE '/dev/stdin' \
          IGNORE INTO TABLE table_name         \
          COLUMNS TERMINATED BY '\t'          \
          LINES TERMINATED BY '\n'            \
          (col1, col2);" \
      database_name

其他更好的方法是将所有数据加载到临时表中,并使用该表通过过滤所需数据来加载原始表中的数据。

关于mysql - LOAD DATA INFILE 用于同时将数据插入两个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17739268/

相关文章:

c - 如何使用scanf读取以空格分隔的数字

PHP相当于MySQL的慢查询日志?

php - 根据其他字段是否有值来更新不同的字段

php - 当数组来自 mysql_fetch_array 时,在 php 中显示数组差异

php - 使用 PHP 代码和 HTML 表单将 excel (.csv) 导入 MySQL

c++ - 如何在C++中一个一个地调用目录中的txt文件

mysql - 带有遗留数据库的回形针

python - 将多维字典写入文件

PHP 从数据库导出 CSV 表

c++ - Createfile2、ReadFile 和 WriteFile;为什么 ReadFile 不读取我在 WriteFile 中写的内容?