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 ...
其中value3
和value5
是将value1
和value2
插入到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 - 将值插入具有未知主键的多个表中的主要内容,如果未能解决你的问题,请参考以下文章
使用 CodeIgniter 框架将数据插入到具有外键的多个表中