【发布时间】:2018-09-05 08:35:47
【问题描述】:
在 MySQL 中,是否可以将 CSV 加载到存储过程中,该存储过程又将填充多个表,每个表都有外键依赖关系 Exl - table1 的主键用于 table2,而 table2 的主键是在table3中使用?
示例 - 在存储过程中要读取的具有 5 列的单个文件, CSV文件中的每一行/记录,使用column1和column2插入table1,得到主键,然后在表2中插入column 3和column4,得到主键,使用table1的主键和table2的主键和coulmn5插入到table3中
我正在考虑以下选项 -
- 有一个外部应用程序读取 CSV,并通过 数据 [CSV 中的每一行] 到带有准备语句的存储过程,这将需要 照顾后续插入所需的表。
- 加载 CSV 进入一个临时表,并有一个准备好的存储过程 语句,它将处理后续插入 所需的表。
- 有一个读取 CSV 的外部应用程序, 并有一组准备好的语句插入到后续 表。但是,从外部获取主键然后重新使用 会造成延误..
重新表述问题以了解解决此问题的性能有效方法,如果可以加载 CSV,我们该怎么做?
【问题讨论】:
-
您的意思是对每个表执行多次 LOAD DATA INFILE 吗?当表数据存储在不同的文件中时。
-
否,存储过程中要读取的单个文件有5列,对于csv文件中的每一行/记录,使用column1和column2插入到table1中,获取主键,然后在表2中插入第3列和第4列,获取主键并使用table1的主键和table2的主键和coulmn5插入到table3中
-
这不是一件小事。有一个想法,但我应该尝试一下;)
-
你能显示你的 CSV,例如一些行吗?是否包含 ID 值?
-
是的。现在,我现在计划强制使用 ID 的 [主键] 而不是 AUTO_INCREMENT,否则速度会大大降低。例如线 - 1000000024,PDT2342,35,1424838470000,1577750400000,45,SK2342_543,1,真,0,USR23 1000000025,PDT1342,35,1424838470000,1577750400000,45,SK1342_54,1,真,0,USR23 跨度>