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

Oracle序列事务性

饶骁
2023-03-14
问题内容

我需要特定的业务场景来在实体(不是PK)上的字段中设置序列中的数字(序列必须是介于min和max之间的数字

我定义了这样的序列:

CREATE SEQUENCE MySequence
  MINVALUE 65536 
  MAXVALUE 4294967296 
  START WITH 65536
  INCREMENT BY 1
  CYCLE
  NOCACHE
  ORDER;

在Java代码中,我从这样的序列中检索数字:

select mySequence.nextval from dual

我的问题是:

如果我select mySequence.nextval from dual在一个事务中调用此“
”,并且在另一个事务中同时调用了同一方法(并行请求),则可以确定该序列返回的值是否不同?

不可能像从第一笔交易中读取未提交的值吗?

因为让我们说我不会使用序列和一个普通的表,在这里我会增加自己的序列,那么如果事务处理是默认的“ READ COMMITTED”,则事务2将能够读取相同的值。


问题答案:

答案是不。

Oracle保证按顺序生成的数字是不同的。即使发出并行请求,RAC环境或回滚和提交也会混合在一起。

序列与事务无关。

看到这里的文档:

使用CREATE SEQUENCE语句创建一个序列,该序列是一个数据库对象,多个用户可以从中生成 唯一的 整数。您可以使用序列自动生成主键值。

生成序列号时,该序列将递增, 而与提交或回滚的事务 无关
。如果两个用户同时增加同一序列,则每个用户获取的序列号可能会有间隔,因为序列号是由另一个用户生成的。一个用户永远无法获取另一用户生成的序列号。一个用户生成序列值后,该用户可以继续访问该值,而不管该序列是否被另一用户递增。

序列号是独立于表生成的,因此同一序列可用于一个或多个表。单个序列号可能会被跳过,因为它们是在最终回滚的事务中生成和使用的。此外,单个用户可能不会意识到其他用户正在从相同的序列进行绘制。



 类似资料:
  • 我需要一个特定的业务场景来设置一个实体(不是PK)上的字段,一个序列中的数字(序列必须是最小值和最大值之间的数字) 我这样定义序列: 在Java代码中,我从序列中检索数字,如下所示: 我的问题是: 如果我在一个事务中调用这个“中选择mySequence.nextval”,同时在另一个事务中调用相同的方法(并行请求),那么确定序列返回的值是不同的吗? 不可能从第一个事务中读取未提交的值吗? 因为假设

  • 问题内容: 我的数据库是Oracle,我的id列值是Oracle序列,此序列由触发器执行,因此,在插入每一行之前,此触发器使用此序列来获取id值。因此,我对应该在实体类中定义哪个ID策略生成感到困惑。 要么 要么 真的很困惑,有人可以阐明这个问题吗?请清楚解释。 问题答案: 我还有一个projet,其中有一个Oracle DB将数据提供给我的@Entity类。如您所说,序列通过触发器为表的PK生成

  • 本文向大家介绍Java与Oracle实现事务(JDBC事务)实例详解,包括了Java与Oracle实现事务(JDBC事务)实例详解的使用技巧和注意事项,需要的朋友参考一下 Java与Oracle实现事务(JDBC事务)实例详解 J2EE支持JDBC事务、JTA事务和容器事务事务,这里说一下怎样实现JDBC事务。        JDBC事务是由Connection对象所控制的,它提供了两种事务模式:

  • 问题内容: 我需要从存储过程中写入日志表。现在,此日志信息必须能够在回滚过程中幸免。 我知道以前曾问过这个问题,但是我的情况有所不同,在这些问题中找不到我的问题的答案。 当存储过程中没有错误时,事情就很简单了,日志表中的条目就在那里。 当有错误时,事情就变得复杂了。 在该过程中,我可以在catch中进行回滚,然后将数据插入日志表,我知道并且我已经在这样做了。 但是问题是当存储过程这样调用时: 我知

  • 您能否帮助解决Resin+Oracle上XA事务的问题: 我们有WebApp,它必须执行涉及Oracle11.2.0.1和EHCache2.7的业务事务。(实际上可能有各种组合--两个不同的Oracle数据源(不同的模式),带有/不带有Ehcache,等等)。这就是从普通JDBC使用切换到JTA事务划分的原因。 > 在外部事务中使用Ehcache访问,在内部事务中只使用DB访问,即使在内部事务中使

  • 问题内容: 我的数据库是Oracle,我的id列值是Oracle序列,此序列由触发器执行,因此,在插入每一行之前,此触发器使用此序列来获取id值。因此,我对应该在实体类中定义哪个id策略生成感到困惑。 要么 要么 真的很困惑,有人可以阐明这个话题吗?请清楚解释。 问题答案: 我还有一个projet,其中有一个Oracle DB将数据提供给我的@Entity类。如您所说,序列通过触发器生成表PK的I