MySQL LOAD DATA 到两个相关表中

Posted

技术标签:

【中文标题】MySQL LOAD DATA 到两个相关表中【英文标题】:MySQL LOAD DATA into two related tables 【发布时间】:2014-02-05 22:42:29 【问题描述】:

mysql 查询中,在我们执行 LOAD DATA 语句之后,是否可以获取最后插入的 ID 用于其他表的 LOAD DATA 中?一般来说,是否可以将 LOAD DATA 用于 2 个相关表?

【问题讨论】:

【参考方案1】:

没有。使用 LOAD DATA INFILE 语法是不可能的。 (LAST_INSERT_ID() 函数只返回一个值,而不是一组行的值,所以除非您插入单独的行,在这种情况下,您不会期望 LOAD DATA INFILE 会用于插入单独的行.)

解决方法(如果我理解您想要完成的任务)是使用中间表作为负载的目标。截断表(或删除并重新创建),并使用 LOAD DATA INFILE 加载行。

然后,使用 SQL 语句从该表中提取数据,并插入/更新其他表。如果您没有其他唯一键,则在中间表中包含 AUTO_INCREMENT id 列是关联行的便捷方式。

【讨论】:

是的,你是对的。我应该先解析 CSV,然后在循环内执行单个 mysql 插入以获取最后插入的 ID。【参考方案2】:

例如,如果我们运行以下插入语句:

mysql_query("INSERT INTO mytable (name,age) VALUES ('Steve',25)") or die(mysql_error());

使用这个函数我们总能得到最后插入的id

mysql_insert_id();

所以我们可以通过这种方式将 id 移动到另一个表中

$last_id = mysql_insert_id();
mysql_query("INSERT INTO mytable2 (uid) VALUES('".$last_id."')") or die(mysql_error());

【讨论】:

谢谢。我应该这样做。

以上是关于MySQL LOAD DATA 到两个相关表中的主要内容,如果未能解决你的问题,请参考以下文章

mysql load data遇到的两个错误和解决方法

Load data local infile 实验报告

如何将数据插入到通过外键相关的两个表中?

IF ELSE inside Load data infile mysql

MySQL随机数据填充工具 mysql_random_data_load

MYSQL 使用 LOAD DATA INFILE 从 csv 导入数据