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

时间:2011-02-11 08:23:18

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

我在包含2个字段blobc_id的文件中获得了包含500M +记录的数据。

还有另外两个文件在其他格式中具有相同的数据: 具有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会让事情变得复杂。

e.g。

# 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

1 个答案:

答案 0 :(得分:0)

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

“SELECT id into outfile”/tmp/file1.csv'FIELDS TERMINATED BY';'从table_a'\ n'终止的行,其中id> 0限制100000“

并在'/tmp/file1.csv'上使用load infile。