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

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,因此如果可以在一个查询中完成就更好。


问题答案:

InnoDB的此示例演示了一种使用互锁查询来实现自己的计数器的方法:

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-
reads.html

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

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



 类似资料:
  • 问题内容: 我想在MySQL中获得类似于PostgreSQL中EXPLAIN ANALYZE所示的详细查询计划。有等同的吗? 问题答案: 编辑:虽然不是直接等效项,也不像解释分析那样详细,但是您可以查看一些工具 mysql提供EXPLAIN和过程analyse() http://dev.mysql.com/doc/refman/5.0/en/explain.html http://dev.mysq

  • 问题内容: 我正在寻找像MySQL中那样的解析函数(有关更多信息,请参阅文档) 解析函数基于一组行来计算合计值。它们与集合函数的不同之处在于,它们为每个组返回多个行。 是否存在? 问题答案: 不,与MSDB,Oracle,PostgreSQL等其他DBMS相比,它是MySQL的主要不足之一。 我强烈怀疑将来是否会看到MySQL中的窗口函数,尤其是在Oracle收购MySQL之后。 更新04/201

  • 问题内容: 我需要能够生成运行查询,该查询将返回下表中的ID的下一个值: 在Oracle中,你可以在序列上调用NEXTVAL,它为你提供下一个序列(注意:不必在表上进行插入)。 谷歌搜索之后,我发现你可以使用以下查询找到auto_increment的当前值: 问题是我希望每次查询该值时该值都增加。在Oracle中,当你调用nextval时,即使不将行插入表中,序列的值也会增加。 有什么方法可以修改

  • 问题内容: 我有类似于Oracle的下表。 我有序列前缀/后缀的逻辑,但为简单起见,此处略过。 假设在当前表中有两条记录。 我的foo表结构是这样的, ; 约束: 我不能使用MySQL AUTO_INCREMENT列,因为它包含不同的客户数据,并且每个客户都可以选择自动生成或手动输入,并且如果客户选择了auto_generation,则应该有空白。因此,customer = 1选择了它,foo#应

  • 问题内容: 有两个不等于运算符-和。 它们之间有什么区别?我听说这比其他字符串比较有效。任何人都可以对此声明做出定性评论。 问题答案: 它们是相同的(与第三种形式一样)。 不过请注意,从解析器的角度来看,它们仍然被认为是不同的,这是为将不匹配或定义的存储轮廓。 这不像在解析器对待和还在分析阶段,所以你不能超载,并为不同的运营商。

  • 问题内容: 我有一个大型数据库,其中包含有标签的记录,我想删除它们。当然,有一种方法可以创建一个全选,使用和更新数据库的PHP脚本,但这需要很长时间。那么,如何使用简单(或复杂)的MySQL查询来做到这一点? 问题答案: 我不相信仅在MySQL中有任何有效的方法可以做到这一点。 MySQL确实有一个功能,但是它只能替换常量字符串,不能替换模式。您可能会编写一个MySQL存储函数来搜索和替换标签,但