MySQL中的多表插入

Posted

技术标签:

【中文标题】MySQL中的多表插入【英文标题】:Multi-table inserts in MySQL 【发布时间】:2020-05-08 11:13:34 【问题描述】:

我有四张桌子

table_a table_b table_c table_abc

table_atable_btable_c 包含一个自动递增的 ID 作为主键和一些任意列。 table_abc有三个外键,分别是table_atable_btable_c的ID。

我想做如下插入(原子地,即如下所述的全部 1-4,或者根本不插入):

    在 table_a 中插入 可以在 table_b 中进行插入 可以在 table_c 中进行插入 分别使用插入 1,2 和 3 生成的 ID 插入 table_abc,如 INSERT INTO table_abc (a_id, b_id, c_id) VALUES ([id from insert 1], [id from insert 2 or NULL],[id from insert 3 or NULL] )

现在的问题是:如何获取插入 1,2 和 3 生成的 ID 值并将它们用于插入 4?请注意,每个表的 ID 都不相同,因此 a_id 可以为 45,而 b_id 为 10,c_id 为 2。

我正在使用 Python 和 Pandas 进行插入。我当然想在每次插入后将 ID 存储在 python 变量中,但我有一种感觉,因为我想要原子性,所以事情会变得复杂。

【问题讨论】:

【参考方案1】:

你使用last_insert_id():

insert into a ( . . . )
    values ( . . . );

set @a_id = last_insert_id();

insert into b ( . . . )
    values ( . . . );

set @b_id = last_insert_id();

insert into c ( . . . )
    values ( . . . );

set @c_id = last_insert_id();

insert into abc(a_id, b_id, c_id)
     values (@a_id, @b_id, @c_id);

【讨论】:

顺便说一下,我假设您的意思是 last_insert_id(),而不是 last_insert_id,并设置而不是 select @Lobs001 。 . .谢谢。

以上是关于MySQL中的多表插入的主要内容,如果未能解决你的问题,请参考以下文章

补12.关于mysql的多表查询

你了解MySQL中的多表联合查询吗?

MySQL复杂的多表计数

mysql的多表查询

oracle的多表插入学习笔记

mysql的多表连接