MySQL相当于Oracle的SEQUENCE.NEXTVAL

我需要能够生成运行查询,该查询将返回下表中的ID的下一个值:

CREATE TABLE animals (

id MEDIUMINT NOT NULL AUTO_INCREMENT,

name CHAR(30) NOT NULL,

PRIMARY KEY (id)

)

在Oracle中,你可以在序列上调用NEXTVAL,它为你提供下一个序列(注意:不必在表上进行插入)。

谷歌搜索之后,我发现你可以使用以下查询找到auto_increment的当前值:

SELECT Auto_increment 

FROM information_schema.tables

WHERE table_name='animals';

问题是我希望每次查询该值时该值都增加。在Oracle中,当你调用nextval时,即使不将行插入表中,序列的值也会增加。

有什么方法可以修改上面的查询,以使返回的值始终与上次调用该查询的时间不同?即Auto_increment每次检查时都会增加,并且在查询中使用时将使用新值。

我正在使用Spring JDBCTemplate,因此如果可以在一个查询中完成就更好。

回答:

你需要为什么创建缺口?要保留ID?我宁愿不惜一切代价“修复”设计并更新其他模块,而不是摸一个序列。

我暗示着通过为每个ID插入一个默认行(标记为无效)来分配并返回该ID,而不是明确地增加序列。这种方法是一致且可移植的。以后,你可以通过匹配的默认值来更新这些默认行,而不必使用显式的序列值来强制插入。这需要更多的内存,但没有锁。在过期的行上进行垃圾收集可以在这里提供帮助。“插入或更新”语句可以重新创建垃圾收集的行,但是我不会这样做。

以上是 MySQL相当于Oracle的SEQUENCE.NEXTVAL 的全部内容, 来源链接: utcz.com/qa/414270.html

回到顶部