Mysql - 将值插入具有未知主键的多个表中

Posted

技术标签:

【中文标题】Mysql - 将值插入具有未知主键的多个表中【英文标题】:Mysql - Insert values into multiple tables with unknown primary key 【发布时间】:2011-07-26 02:13:45 【问题描述】:

在以下情况下最佳做法是什么:

我想编写一个 mysql 语句从结果集中获取数据(连接 3 个表),并将这些值插入到 3 个新表中。现在有2个问题,一个是我要同时插入3个表,另一个是需要进入3个表中的2个的值之一是插入值生成的primary kry进入三个表中的第一个。

用高级术语(忽略语法),我想:

INSERT INTO    `table1`(
                   `one_field1`,
                   `one_field2`,
                   ...
               ), `table2`( -- not possible?
                   `two_field1`,
                   `two_field2`,
                   ...
               ), `table3`( -- not possible?
                   `three_field1`,
                   `three_field2`,
                   ...
               )
SELECT         value1,
               value2,
               ...,
               value3,
               value4,
               ...,
               value5,
               value6,
               ...
FROM           ...

其中value3value5 是将value1value2 插入到table1 中生成的主键。

将其拆分为多个查询是否更好(最佳实践),或者是否有一种有效的方法可以在单个查询中执行此操作。

谢谢

【问题讨论】:

【参考方案1】:

不能用一个语句插入多个表 http://dev.mysql.com/doc/refman/5.1/en/insert.html

您可以使用 `last_insert_id() 从最后一次插入中获取自动增量值。因此,如果您分解插入,则可以在运行下一个插入之前获取每个插入的最后一个主键(假设您使用自动增量)。 http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id

【讨论】:

最终通过使用视图作为临时转换表来解决问题。【参考方案2】:

例如 :INSERT INTO districts(district) VALUES ('Bagalkot'),('Bangalore Rural'),('Bangalore Urban'),('Belgaum'),('Bellary'),(' Bidar'),('Bijapur'),('Chamraj Nagar'),('Chikballapur'),('Chickmagalur'),('Chitradurga'),('Dakshina Kannada'),('Davanagere'),(' Dharwad'),('Gadag'),('Gulbarga'),('Hassan'),('Haveri'),('Kodagu'),('Kolar'),('Koppal'),('Mandya' ),('Mysore'),('Ramnagara'),('Raichur'),('Shimoga'),('Tumkur'),('Karwar'),('Udupi'),('Yadgir')

【讨论】:

这没有回答问题。

以上是关于Mysql - 将值插入具有未知主键的多个表中的主要内容,如果未能解决你的问题,请参考以下文章

mysql表中,表的外键关联自身主键,为啥插入不了数据?

mysql表中一个表中可以有多个主键吗?

如何使用具有多个结果的子查询将值插入表中?

使用 CodeIgniter 框架将数据插入到具有外键的多个表中

代码周边MongoDB与Mysql对比以及插入稳定性分析(指定主键的影响)

如何在具有symfony主键的表中插入值