SQL 中返回自动递增键和最后插入 ID 之间的区别

Difference between returning auto increment key and last insert ID in SQL

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

  1. INSERT ... RETURNING id

  2. SELECT LAST_INSERT_ID()

创建时 idINT UNSIGNED NOT NULL AUTO_INCREMENT。通常 return 相同的值 - 通过使用第一个检查,然后 运行 第二个,并比较 returned 值 - 但除了 RETURNING 可能存在的明显差异return 多行插入多行,它允许 return 不仅仅是键列,为了检索插入的自动递增键,它们之间的实际区别是什么?

知道这是 MariaDB 中的 InnoDB table 可能是相关的。

INSERT . . . RETURNING 更灵活:

  • 它 return 多个表达式,如果你愿意,所以你可以 return 来自插入行的更多值而不仅仅是自动递增的 id。
  • 它 return 多行。

LAST_INSERT_ID() 实际上是为单行插入而设计的,并且只有 return 一个 id。我建议使用 INSERT . . . RETURNING.

第一个肯定return是插入行的id。如果在 INSERTSELECT 之间插入了另一行,则第二个可能 return 不同行的 ID。

如果插入多行,INSERT-RETURNING 将 return 所有 ID 都已插入,而 LAST_INSERTED_ID() 将 return 只有一个