当前位置: 首页 > 面试题库 >

MySQL相当于Oracle的SEQUENCE.NEXTVAL

谷梁智
2023-03-14
问题内容

我需要能够生成运行查询,该查询将返回下表中的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的rowid? 我想做一个MySQL等效于此查询!!! 我想做的是::my_table没有主键..我正试图删除重复的值并强加一个主键(field1和field2的复合)。 问题答案: 在MySql中,通常使用会话变量来实现功能: 但是您无法在要从子查询中删除的表上进行排序。 UPD :也就是说,您将需要创建一个临时表,将测距子查询插入到该临时表中,

  • 问题内容: 我有一行用于SQL Server的代码,它采用的日期列为“ YYYYMMDD”,其中DD为00,并将00转换为01,以便它与datetime一起使用。我希望能够使用MySQL 当前适用于SQL Server的代码: 但是isdate在MySQL中无效,该怎么解决? 问题答案: 您可以尝试使用STR_TO_DATE函数。如果表达式不是日期,时间或日期时间,则返回。

  • 问题内容: 在Access(或Jet,就此而言)中,Oracle的decode()是否具有等效项。 我面临的问题是:我应该基本上根据状态和日期(所有记录的状态均为2)对结果集进行排序(排序)。 在甲骨文中,我会像 问题答案: 最接近的类比是函数,例如 甲骨文: 访问数据库引擎 请注意,使用该函数,您每次都必须提供完整的谓词,因此,您不仅可以仅使用Supplier_id。对于默认值,请使用对人类读者

  • 问题内容: Oracle有2个函数- rank()和density_rank()-我发现它们对某些应用程序非常有用。我现在在mysql中做某事,想知道他们是否有与之等效的东西? 问题答案: 没有直接等效的方法,但是您可以使用一些(效率不高)自联接来伪造它。来自MySQL查询howtos集合的一些示例代码:

  • 问题内容: 首先,我是熊猫的新手,但我已经爱上了它。我正在尝试实现与Oracle的滞后功能等效的功能。 假设您有以下DataFrame: 如果这是一个oracle数据库,而我想创建一个按“ Group”列分组并按Date排序的滞后函数,则可以轻松使用此函数: 这将产生下表: 在大熊猫中,我可以将日期设置为索引并使用shift方法: 唯一的问题是,这不会按列分组。即使将日期和组这两列设置为索引,我仍

  • 问题内容: 在MySQL中,当您联接来自具有相同名称的不同表中的列时,可以在联接中使用关键字USING。例如,这些查询产生相同的结果: SQL Server中是否有等效的快捷方式? 问题答案: 不,必须使用: