Oracle 序列号为nextval的插入是否为该编号的原子?

Oracle 序列号为nextval的插入是否为该编号的原子?,oracle,sequence,Oracle,Sequence,如果我在自动提交模式下向表中插入行,其中一列由序列的nextval值定义,那么这些值是否保证按插入顺序可见?我想知道,如果一个场景中有三个并发连接: 插入foo 插入条 选择全部,观察序列号为2的条形图,但不选择序列号为1的foo。 是可能的。Oralce序列是线程安全的,并且始终按顺序创建。保证生成的数字是唯一的 但是,如果另一个会话仍然有一个打开的事务,您可能不会立即看到另一个会话的插入。这可能会在您从选择中看到的序列中创建一个临时间隙 此外,如果一个名为NEXTVAL的事务被回滚,那么这将

如果我在自动提交模式下向表中插入行,其中一列由序列的nextval值定义,那么这些值是否保证按插入顺序可见?我想知道,如果一个场景中有三个并发连接:

插入foo 插入条 选择全部,观察序列号为2的条形图,但不选择序列号为1的foo。
是可能的。

Oralce序列是线程安全的,并且始终按顺序创建。保证生成的数字是唯一的

但是,如果另一个会话仍然有一个打开的事务,您可能不会立即看到另一个会话的插入。这可能会在您从选择中看到的序列中创建一个临时间隙

此外,如果一个名为NEXTVAL的事务被回滚,那么这将在序列中造成永久性的间隙。序列不受回滚或提交的影响。增量始终是即时的和确定的


请参阅:Oracle帮助中心

Oralce序列是线程安全的,并且始终按顺序创建。保证生成的数字是唯一的

但是,如果另一个会话仍然有一个打开的事务,您可能不会立即看到另一个会话的插入。这可能会在您从选择中看到的序列中创建一个临时间隙

此外,如果一个名为NEXTVAL的事务被回滚,那么这将在序列中造成永久性的间隙。序列不受回滚或提交的影响。增量始终是即时的和确定的


请参阅:Oracle帮助中心

自动提交不是Oracle数据库的概念。也就是说,数据库中没有自动提交模式或功能—它只在SQL*Plus等工具中实现

工具可以以不同的方式实现自动提交,但在大多数情况下,它可能遵循以下原则:

(user's command, e.g., INSERT INTO ...)
<success response from Oracle server>
COMMIT;
在这种情况下,只有当服务器对用户命令的执行做出肯定响应时,工具才会发出提交。在延迟>10ms的网络环境中,再加上Oracle服务器本身的多线程异常,我想说的是,可能存在会话2的自动提交在会话1之前在服务器上得到处理的情况,因此,会话3可能会观察到bar而不是foo


相对于会话3开始查询的时间,每个会话的提交时间是唯一重要的。会话3将看到会话1和/或会话2在会话3的查询开始时提交的任何工作。

自动提交不是Oracle数据库的概念。也就是说,数据库中没有自动提交模式或功能—它只在SQL*Plus等工具中实现

工具可以以不同的方式实现自动提交,但在大多数情况下,它可能遵循以下原则:

(user's command, e.g., INSERT INTO ...)
<success response from Oracle server>
COMMIT;
在这种情况下,只有当服务器对用户命令的执行做出肯定响应时,工具才会发出提交。在延迟>10ms的网络环境中,再加上Oracle服务器本身的多线程异常,我想说的是,可能存在会话2的自动提交在会话1之前在服务器上得到处理的情况,因此,会话3可能会观察到bar而不是foo


相对于会话3开始查询的时间,每个会话的提交时间是唯一重要的。会话3将看到会话1和/或会话2在会话3的查询开始时提交的任何工作。

可以这么说,上面的场景会发生吗?差距不会有多大影响,但如果一个被选中的人先看到一个较高的数字,然后看到一个较低的数字,我就有麻烦了。在这种情况下,我想我需要在插入之前锁定表。这并没有真正的帮助,因为在锁定表之前,其他会话仍然可以获取下一个数字,但只有在提交后才能插入它!是的,那应该行,get NEXTVAL、INSERT、commit.@RafaelWinterhalter您想解决什么问题?Oracle文档说:如果您没有指定以下任何一个子句,那么您将创建一个从1开始并增加1[…]的升序如果您使用的是Oracle Real Application Clusters,则只有在保证有序生成时才需要顺序?差距不会有多大影响,但如果一个被选中的人先看到一个较高的数字,然后看到一个较低的数字,我就有麻烦了。在这种情况下,我想我需要在插入之前锁定表。这并没有真正的帮助,因为在锁定表之前,其他会话仍然可以获取下一个数字,但只有在提交后才能插入它!是的,那应该行,get NEXTVAL、INSERT、commit.@RafaelWinterhalter您试图解决什么问题?Oracle文档说:如果您没有指定以下任何子句,那么您将创建一个升序序列 这从1开始,增加1[…],如果您使用的是Oracle Real Application Clusters,则只有在保证有序生成时才需要顺序。