4

从这里引用:

mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();

以上的用例是什么(有什么好处)?

我之前从未使用过带有任何参数的 LAST_INSERT_ID ...

更新

我的问题是,当它通过自动递增的主键自动开箱即用时,为什么要以这种方式模拟这种序列?

4

3 回答 3

1

在不使用 AUTO_INCREMENT 的情况下生成序列的用例是当结果 ID 值用于多个表中时,并且它需要在所有表中是唯一的。每个表中的 AUTO_INCREMENT 通常会导致每个表中存在相同的值。

忽略正常形式的要求,示例可能来自教室。每个考试都需要一个唯一的 ID,但考试记录在多个表格中:Pop-quizes、每周考试、期中考试和期末考试。使用 OP 提供的报价允许生成 ID 序列,该序列可用于在所有表中保持 ID 唯一。

于 2019-08-04T18:46:16.023 回答
0

上面给出的查询是更新查询,查询只是更改之前行中的 id。它只是更新一个行 id,所以需要像这样更新它。可能是用户希望在对其进行一些工作后更改结果行的索引。LAST_INSERT_ID 将返回最后插入的 id。只有当用户想要将行的索引从前一个更改为结果集中最新的索引时,才会出现这种情况。

于 2011-08-19T05:18:09.320 回答
0

也从这里引用:

如果 expr 作为 LAST_INSERT_ID() 的参数给出,则该参数的值由函数返回,并作为 LAST_INSERT_ID() 返回的下一个值被记住。这可以用来模拟序列:

于 2011-08-19T03:42:13.313 回答