从这里引用:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();
以上的用例是什么(有什么好处)?
我之前从未使用过带有任何参数的 LAST_INSERT_ID ...
更新
我的问题是,当它通过自动递增的主键自动开箱即用时,为什么要以这种方式模拟这种序列?
从这里引用:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();
以上的用例是什么(有什么好处)?
我之前从未使用过带有任何参数的 LAST_INSERT_ID ...
更新
我的问题是,当它通过自动递增的主键自动开箱即用时,为什么要以这种方式模拟这种序列?
在不使用 AUTO_INCREMENT 的情况下生成序列的用例是当结果 ID 值用于多个表中时,并且它需要在所有表中是唯一的。每个表中的 AUTO_INCREMENT 通常会导致每个表中存在相同的值。
忽略正常形式的要求,示例可能来自教室。每个考试都需要一个唯一的 ID,但考试记录在多个表格中:Pop-quizes、每周考试、期中考试和期末考试。使用 OP 提供的报价允许生成 ID 序列,该序列可用于在所有表中保持 ID 唯一。
上面给出的查询是更新查询,查询只是更改之前行中的 id。它只是更新一个行 id,所以需要像这样更新它。可能是用户希望在对其进行一些工作后更改结果行的索引。LAST_INSERT_ID 将返回最后插入的 id。只有当用户想要将行的索引从前一个更改为结果集中最新的索引时,才会出现这种情况。
也从这里引用:
如果 expr 作为 LAST_INSERT_ID() 的参数给出,则该参数的值由函数返回,并作为 LAST_INSERT_ID() 返回的下一个值被记住。这可以用来模拟序列: