SQL序列

发布于:2024-04-20 ⋅ 阅读:(26) ⋅ 点赞:(0)

序列

SEQUENCE
序列是Oracle提供的一组能够自动增长的序号,一般是提供主键值用的。

序列的创建

CREATE SEQUENCE 序列名                    ----可以结束了
	START WITH n                         ----初始值 n,如果这句话不写,默认是1
		INCREMENT BY n                   ----n代表增长幅度n,如果这句话不写,默认是1,增长幅度可以是负数
			MAXVALUE n  |  NOMAXVALUE    ----最大值n或者没有最大值,如果不写这句话,默认的最大值是10的27次方		
				MINVALUE  |  NOMINVALUE  ----最小值n或者没有最小值,如果不写这句话,默认的最小值是-10^27
					CYCLE | NOCYCLE      ----循环或者不循环,不写默认是不循环
						CACHE n |        ----缓存N或者没有缓存,不写默认缓存20个序号 
CREATE SEQUENCE noname_1
	START WITH 5
		INCREMENT BY 2
			MAXVALUE 100
				CYCLE
					CACHE 20;

注意:缓存不能超过 最大值/增长幅度

序列的使用

当前值
currval
下一个值
nextval
查看一下该序列当前序号是多少

SELECT noname_1.currval from dual;

注意:
1.该序列仅仅是创建出来,还没有任何值
2.使用序列第一次需要使用下一个值

SELECT noname_1.nextval from dual;

当循环的时候,是从1开始的,不论你的步长不论初始值,都是1.
以前插入数据:

INSERT INTO  noname VALUES(1,'NONA');
INSERT INTO  noname VALUES(2,'NONB');
INSERT INTO  noname VALUES(3,'NONC');
INSERT INTO  noname VALUES(4,'NOND');
INSERT INTO  noname VALUES(5,'NONE');
INSERT INTO  noname VALUES(6,'NONF');
INSERT INTO  noname VALUES(7,'NONG');
INSERT INTO  noname VALUES(8,'NONH');
INSERT INTO  noname VALUES(9,'NONI');

学了序列后的插入数据

CREATE SEQUENCE addp_1 
	START WITH 0
		INCREMENT BY 1
			MAXVALUE 100
				CYCLE
					CACHE 20;
INSERT INTO  noname VALUES(addp_1.nextval,'NONA');
INSERT INTO  noname VALUES(addp_1.nextval,'NONB');
INSERT INTO  noname VALUES(addp_1.nextval,'NONC');
INSERT INTO  noname VALUES(addp_1.nextval,'NOND');
INSERT INTO  noname VALUES(addp_1.nextval,'NONE');
INSERT INTO  noname VALUES(addp_1.nextval,'NONF');
INSERT INTO  noname VALUES(addp_1.nextval,'NONG');
INSERT INTO  noname VALUES(addp_1.nextval,'NONH');
INSERT INTO  noname VALUES(addp_1.nextval,'NONI');

注意:如果使用的是ORACLE 11g及以后的版本,由于存在“延迟段”技术,则会跳过序列的第一个值,即当我们创建了新的表和序列,在插入insert语句时,序列会跳过第一个值从2开始。
解决方法:修改数据库延迟段属性位FALSE,需要权限

ALTER SYSTEM SET deferred_segment_creation=FALSE; 

删除序列

DROP 序列名