Oracle中序列(sequence)初始值从2开始的解决方法

为什么用Oracle11g创建序列后插入数据的初始值老是从2开始?
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,即当我们创建了新的表(table)和序列(sequence),
在插入(insert)语句时,序列会跳过第一个值(1)。
所以结果是插入的序列值从 2(序列的第二个值) 开始, 而不是 1开始。
测试代码:

--建立测试表
CREATE TABLE GROUP_TEST(
    ID NUMBER,
    NAME VARCHAR2(10),
    VALUE NUMBER,
    REMARKS VARCHAR2(255)
);
 
--表注释(加注释是因为我对加注释的语句不熟悉。练习一下)
COMMENT ON TABLE GROUP_TEST IS '为了测试CUBE,ROLLUP,GROUPING,GROUPING_ID的区别';
COMMENT ON COLUMN GROUP_TEST.ID IS '序号';
COMMENT ON COLUMN GROUP_TEST.NAME IS '名字';
COMMENT ON COLUMN GROUP_TEST.VALUE IS '消费金额';
COMMENT ON COLUMN GROUP_TEST.REMARKS IS '备注';
 
--创建序列(序列之前都是用别人的。自己也建一个试试)
CREATE SEQUENCE SEQ_GROUP_TEST
INCREMENT BY 1  --每次+1
START WITH 1    --1开始计数
MAXVALUE 999999999; --最大序列号为999999999
 
--插入数据[记得COMMIT;]
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'marry',9,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'lee',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',9,'学习用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'marry',10,'学习用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'lee',15,'学习用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',16,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
INSERT INTO GROUP_TEST VALUES(SEQ_GROUP_TEST.NEXTVAL,'tom',8,'生活用品');
commit;
--查看插入的数据
SELECT * FROM GROUP_TEST;

想要解决这个问题有两种方法:
1.更改数据库的“延迟段创建”特性为false(需要有相应的权限)

  ALTER SYSTEM SET deferred_segment_creation=FALSE; 

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

CREATE TABLE GROUP_TEST(
    ID NUMBER,
    NAME VARCHAR2(10),
    VALUE NUMBER,
    REMARKS VARCHAR2(255)
) SEGMENT CREATION IMMEDIATE;
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值