MySQL:将一个文件的数据插入到两张表中,一张带有auto_increment id,一张连接表

标签 mysql sql auto-increment load-data-infile last-insert-id

我有超过 5 亿条记录的数据,在一个包含 2 个字段的文件中,blobc_id

还有两个其他格式的具有相同数据的文件: 具有 90M 唯一 blob 的文件。 一个带有 blob 的文件,以及每条记录的逗号分隔的 c_id 列表。

我有两个表:

table_a: [id, blob] # id is auto-increment
table_b: [a_id, c_id]

对于每个唯一的 blob,必须在 table_a 中创建一条记录。对于文件中的每条记录,必须使用 table_a 的适当外键在 table_b 中创建一条记录。

我现在使用的解决方案是生成插入语句,使用last_insert_id,但是速度太慢了。我更喜欢使用 LOAD DATA INFILE,但自动递增 id 使事情变得复杂。

例如

# Raw data
c_id   blob
   1   aaaa
   2   aaaa
   3   aaaa
   3   aaab
   4   aaac

期望的输出:

# Table_a
id  blob
 1  aaaa
 2  aaab
 3  aaac

# Table_b
c_id a_id
   1    1
   2    1
   3    2
   3    2
   4    3

最佳答案

我不确定您是如何填充 table_b 的“c_id”字段的,但是您可以这样做: 首先加载 table_a 中的所有数据,然后通过执行批量查询加载 table_b,例如:

“SELECT id into outfile '/tmp/file1.csv' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' from table_a where id > 0 limit 100000"

并在“/tmp/file1.csv”上使用加载文件。

关于MySQL:将一个文件的数据插入到两张表中,一张带有auto_increment id,一张连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966930/

相关文章:

mysql - SQL-Query 在应该返回一个的地方返回 2 个返回值

php - 如何将数组转换为带索引的字符串

MySQL 查询 - 检索具有最新时间戳值的所有设备信息

java - 整数递增并与字符串连接

postgresql - PostgreSQL 中的 Activerecord 导入和序列列

command-line - mysqldump 命令导致 "error 1064 syntax error"

mysql - 如何计算 SQL 表中不同类型事物的数量?

SQL 查询 3 个表

sql - SQL Server 中临时表的范围

mysql自增并合并多个数据库为一个master