SQL中返回自增键和最后插入ID的区别
Posted
技术标签:
【中文标题】SQL中返回自增键和最后插入ID的区别【英文标题】:Difference between returning auto increment key and last insert ID in SQL 【发布时间】:2021-03-16 11:52:46 【问题描述】:在我们的代码库中,我们使用两种不同的方式来检索新插入行的自动递增键:
INSERT ... RETURNING id
SELECT LAST_INSERT_ID()
其中id
在创建时是INT UNSIGNED NOT NULL AUTO_INCREMENT
。两者通常返回相同的值 - 通过使用第一个检查,然后运行第二个,并比较返回的值 - 但除了 RETURNING
可能在多行插入时返回多行的明显区别之外,它允许返回超过只是键列,为了检索插入的自动递增键,它们之间有什么实际区别?
知道这是 MariaDB 中的 InnoDB 表可能很重要。
【问题讨论】:
【参考方案1】:第一个肯定返回插入行的 id。如果在 INSERT
和 SELECT
之间插入另一行,第二个可能会返回不同行的 id。
【讨论】:
有趣。但是当我对所有插入使用事务时,它仍然可能发生吗?我立即致电LAST_INSERT_ID
- 或者更好的是,我使用驱动程序库来执行此操作(我相信它会在每次查询时自动调用),会发生吗?【参考方案2】:
INSERT . . . RETURNING
更加灵活:
LAST_INSERT_ID()
真的是为单行插入而设计的,并且只返回一个 id。我推荐使用INSERT . . . RETURNING
。
【讨论】:
我已经在问题中澄清了多行插入是一个明显的区别【参考方案3】:在插入多行的情况下,INSERT-RETURNING 将返回所有已插入的 ID,而 LAST_INSERTED_ID() 将仅返回一个
【讨论】:
我已经在问题中澄清了多行插入是一个明显的区别以上是关于SQL中返回自增键和最后插入ID的区别的主要内容,如果未能解决你的问题,请参考以下文章