Oracle产生的序列总是从2开始是怎么回事?

用oracle11g创建序列后插入数据的初始值老是从2开始

oracle新表使用序列(sequence)作为插入值,初始值不是第一个,

oraclesequence

 1 --创建测试表--
 2 create table tbl_test(
 3         test_id number primary key,
 4         test_name varchar2(20)
 5  );
 6  
 7  --为tbl_test创建序列--
 8 create sequence seq_test
 9      increment by 1 -- 每次加几个
10      start with 1 -- 从1开始计数
11  ;
12  
13  --插入测试数据--
14  insert into tbl_test values(seq_test.nextval,'测试');
15  commit;
16  
17  --查询表中的数据
18  select * from tbl_test;

问题原因:

·当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值

·oracle从 11.2.0.1版本开始,提供了一个“延迟段创建”特性:

当我们创建了新的表(table)和序列(sequence),

在插入(insert)语句时,序列会跳过第一个值(1)。

所以结果是插入的序列值从2(序列的第二个值) 开始,而不是1开始。

想要解决这个问题有两种方法:

更改的“延迟段创建”特性为false(需要有相应的权限)

1 alter system set deferred_segment_creation=false;

或者

在创建表时让seqment立即执行,如:

1 create table tbl_test(
2     test_id number primary key, 
3     test_name varchar2(20)
4 )
5  segment creation immediate;
(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐