MySQL 导入数据。我可以导入存储过程吗?

Posted

技术标签:

【中文标题】MySQL 导入数据。我可以导入存储过程吗?【英文标题】:MySQL importing data. Can I import into stored procedure? 【发布时间】:2015-12-05 19:00:49 【问题描述】:

我想知道是否可以使用存储过程将平面文件中的数据加载到多个表中(需要多次插入)。

我已经有一个存储过程

CREATE PROCEDURE `Insert_Hockey` (cardyear YEAR, fname VARCHAR(45), lname VARCHAR(45), brand VARCHAR(45), card_id VARCHAR(8))
BEGIN
    /* Create another generic 'Item' in Items table */
    INSERT INTO Items(category_id) VALUES (2);

    /* Need to use the AUTO_INCREMENTED item_id from Items below so use LAST_INSERT_ID */
    INSERT INTO Hockey_Cards VALUES(LAST_INSERT_ID(), cardyear, fname, lname, brand, card_id);
END

现在假设我在电子表格中有一堆关于曲棍球卡的数据。我可以导出为制表符分隔的格式。我想从文件中加载数据,但使用制表符分隔的数据作为存储过程的参数。这样的事情可能吗?如果不是,那么在这种情况下,您将如何以简单的方式导入数据,其中插入依赖于先前的插入。

我正在尝试在我的数据库中为此类情况创建一些存储过程/事务(我不知道我的情况是否有所不同)。在某些情况下,我使用通用表 -> 特定表类型的模式,其中特定表具有指向通用表的外键。因此,插入细节需要事先插入一般,获取 AUTO_INCREMENTED 主键并将其用于插入“特定”表。

【问题讨论】:

【参考方案1】:

我不确定您是否可以完全按照您的要求进行操作,但有几个替代方案可能会有所帮助:

为什么不使用插入触发器?因此,您将拥有一个用于导入数据的表,以及该表上的插入触发器。触发器应该为每条记录触发,所以从触发器调用你的 SP 应该得到你想要的。

INSERT DATA INFILE 的语法允许一些非常复杂的导入代码。鉴于您向我们展示的相对简单的 SP 代码,我希望您能够让INSERT DATA INFILE 为您自己执行此操作,而无需 SP。代码会比 SP 更复杂,但肯定是可以的。

【讨论】:

以上是关于MySQL 导入数据。我可以导入存储过程吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以将 .sql 文件导入 HSQL 数据库吗?

导入过程后奇怪的MYSQL查询问题

存储过程从视图中导入数据

navicat用excel导入数据,由于字段数超过255个,导入时navicat读不到excel中255个以后的字段,如何解决

可以加快导入过程吗?目前 500K 行数据需要 4 分 45 秒

我可以使用 Sqoop 将数据从 SQL Server 导入 Azure Blob 存储吗