在MySQL中,是否可以将CSV加载到存储过程中,该存储过程又将填充多个表,每个表都具有外键依赖关系Exl-table1的主键将在table2中使用,而table2的主键将成为在table3中使用了吗?
示例- 在存储过程中要读取的包含5列的单个文件, 对于CSV文件中的每行/记录,使用column1和column2插入表1,获取主键,然后在表2中插入第3列和column4,获取主键,并使用table1的主键和table2的主键和coulmn5插入表3
我正在考虑以下选项-
重新表述该问题以了解解决此问题的高效方法,如果可以加载CSV,我们该怎么做?
答案 0 :(得分:1)
是-可以做到。我不认为应该采用这种方式,因为它将大量业务逻辑放入数据库中,这通常被认为是一件坏事。在数据库外部的应用程序中,这样做更容易,更好。
但是-问题是可以做到的。我可以通过将CSV加载到临时表中来完成此操作(因为在存储过程中似乎无法逐行读取)。然后,您可以遍历表中的所有行并执行所需的操作。
希望为您提供线索,助您一臂之力。
答案 1 :(得分:1)
否,请参见Appendix C1 - Restrictions on Stored Programs,它告诉您LOAD DATA不能在存储的例程中使用。
存储例程中不允许使用SQL语句
存储的例程不能包含任意SQL语句。下列 声明是不允许的:
锁定语句LOCK TABLES和UNLOCK TABLES。
更改视图。
加载数据和加载表。
同样,在documentation for prepared statements中,您会发现它显示以下内容
通常,SQL预准备语句中不允许的语句是 存储程序中也不允许。
,然后给出允许的语句的有用列表。不幸的是,您在存储程序的文档中找不到相同的列表(可能会更有用)。
答案 2 :(得分:0)
经过上述多种方法后,找到了一种最佳方法。将整体任务分为两个主要部分-拆分数据,加载表
[对于所有这些表,请对主键进行硬编码,而不要依赖于AUTO_INCREMENT]
感谢您的输入,建议和指示。