Oracle数据库-------------序列

关于Oracle数据库的学习记录:

四十四、序列
在很多的数据库里面都存在一种称为自动增长列的数据类型,几乎所有的关系型数据库都支持自动增长列的操作,但是只有Oracle特殊,它只有在Oracle 12C版本之后才提供有自动增长列,在这之前都没有,所有类似的操作都必须通过序列的方式处理,如果是Oracle 12C之前的版本只能够手工处理
序列的创建语法:
CREATE SEQUENCE 序列名称
[INCREMENT BY 步长] [START WITH 开始值]
[MAXVALUE 最大值 | NOMAXVALUE]
[MINVALUE 最小值 | NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE 缓存数据 | NOCACHE];
大部分情况,使用序列的时候都只会创建默认序列,默认序列就是最小值为1,并且没有最大值,开始值为0,并且设置有20个缓存数据
范例:创建序列
CREATE SEQUENCE myseq;
序列对象的创建完成后其内容一定会保存在数据字典之中,如果要查询可以使用“user_sequences”
范例:查询序列
SELECT * FROM user_sequences;
查询序列的信息之后,返现返回有如下几个内容:
**序列名称(SEQUENCE_NAME):myseq;
**最小值(MIN_VALUE):1;
**最大值(MAX_VALUE):1.0000E+28
**步长(INCREMENT_BY):1;
**是否循环(CY):N;
**缓存(CACHE_SIZE):20;
**最后以此内容(LAST_NUMBER):1;
那么现在序列已经创建成功,随后就需要去使用此序列,对于序列的使用可以采用两个伪列操作:
**序列对象.nextval:表示进行序列的增长,每调用一次,序列加上指定的步长 ;
**序列对象.currval:表示取得当前的序列内容,不管如何调用,序列内容不发生改变
当序列对象创建完成之后,严格来讲是无法直接执行currval的,必须限制性过nextval之后才可以使用currval
SELECT myseq.nextval FROM dual;
SELECT myseq.currval FROM dual;
在任何的系统之中提供了缓存的概念,那么基本上都是指的提升代码运行性能的一种手段,所谓序列的缓存,严格来讲是缓存了20个数据,而最终的LAST_NUMBER是利用了“缓存个数*步长”计算得来的
如果使用缓存有可能会出现跳号的问题
如果序列要想为表中的某个字段进行自动编号操作,那么只能够利用INSERT语句完成,不嗯能够够鞋子啊数据库的创建脚本里

DROP TABLE mytab;
CREATE TABLE mytab(
    id        NUMBER,
    name      VARCHAR2(20),
    CONSTRAINT pk_id PRIMARY KEY(id)
);
INSERT INTO mytab(id,name) VALUES(myseq.nextval,'kaka');
由于此时只是在一个session下进行的操作,所以序列生成的顺序还算是固定的

在序列创建的时候,以上只是使用了序列最基础的创建语法完成的,但是在序列定义的时候也有一些选项

范例:修改序列的步长为2
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq
INCREMENT BY 2;

范例:修改序列的开始值
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq
INCREMENT BY 2
START WITH 10000000000;

SELECT TO_CHAR(myseq.nextval,99999999999999) FROM dual;

范例:设置循环序列,例如,现在希望一个序列可以在1,3,5,7,9之间循环显示
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq
INCREMENT BY 2
START WITH 1
MINVALUE 1
MAXVALUE 9
CYCLE CACHE 3;
在设置循环序列的时候一定要考虑到缓存个数的影响

总结:
1.序列的创建语法:CREATE SEQUENCE 序列名称;
2.序列的使用:增加数据时使用“序列名称.nextval";

猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80778527