【问题标题】:Difference between returning auto increment key and last insert ID in SQLSQL中返回自增键和最后插入ID的区别
【发布时间】:2021-03-16 11:52:46
【问题描述】:

在我们的代码库中,我们使用两种不同的方式来检索新插入行的自动递增键:

  1. INSERT ... RETURNING id

  2. SELECT LAST_INSERT_ID()

其中id 在创建时是INT UNSIGNED NOT NULL AUTO_INCREMENT。两者通常返回相同的值 - 通过使用第一个检查,然后运行第二个,并比较返回的值 - 但除了 RETURNING 可能在多行插入时返回多行的明显区别之外,它允许返回超过只是键列,为了检索插入的自动递增键,它们之间有什么实际区别?

知道这是 MariaDB 中的 InnoDB 表可能很重要。

【问题讨论】:

    标签: sql mariadb last-insert-id sql-returning


    【解决方案1】:

    第一个肯定返回插入行的 id。如果在 INSERTSELECT 之间插入另一行,第二个可能会返回不同行的 id。

    【讨论】:

    • 有趣。但是当我对所有插入使用事务时,它仍然可能发生吗?我立即致电LAST_INSERT_ID - 或者更好的是,我使用驱动程序库来执行此操作(我相信它会在每次查询时自动调用),会发生吗?
    【解决方案2】:

    INSERT . . . RETURNING 更加灵活:

    • 如果您愿意,它会返回多个表达式,因此您可以从插入的行返回更多的值,而不仅仅是自动递增的 id。
    • 它返回多行。

    LAST_INSERT_ID() 真的是为单行插入而设计的,并且只返回一个 id。我推荐使用INSERT . . . RETURNING

    【讨论】:

    • 我已经在问题中澄清了多行插入是一个明显的区别
    【解决方案3】:

    在插入多行的情况下,INSERT-RETURNING 将返回所有已插入的 ID,而 LAST_INSERTED_ID() 将仅返回一个

    【讨论】:

    • 我已经在问题中澄清了多行插入是一个明显的区别
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多