【问题标题】:Mysql - Insert values into multiple tables with unknown primary keyMysql - 将值插入具有未知主键的多个表中
【发布时间】: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 中生成的主键。

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

谢谢

【问题讨论】:

    标签: mysql


    【解决方案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')

    【讨论】:

    • 这没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多