序列

        在许多数据库之中都会存在有一种数据类型——自动增长列,它能够创建流水号。在Oracle 12C以前并没有提供这样自动的增长列,但是从Oracle 12C开始出现了自动增长列,如果在Oracle之中要想实现这样的自动增长列,就可以使用序列的方式完成。

1、如果要想使用序列,则可以采用如下的语法完成创建:

序列序列属于数据库对象的创建过程,属于DDL的分类范畴。对于序列而言,创建之后一定会在数据字典之中保存。

范例:创建序列

CREATE SEQUENCE myseq;

既然序列的信息会在数据字典之中保存,那么现在就可以查询序列的数据字典。

序列

根据查询出来的结果进行分析:

序列

现在序列已经创建成功了,如果要想使用序列,则可以使用如下的两个伪列来完成:

        nextval:取得序列下一个内容,每一次调用序列的值都会增长;

        currval:表示取得序列的当前内容,每一次调用序列不会增长。如果要想使用此伪列,那么在使用之前必须首先使用nextval取得内容才可以。

2、如果要想在实际开发之中使用序列进行开发操作,那么必须手工在数据增加的时候进行处理,而数据表的定义与之前没有任何区别。

序列此时的数据表与原始相比没有任何区别,但是最关键的部分是在数据增加的时候,由于ID属于主键列,所以可以利用序列来生成ID的值

INSERT INTO mytab(id,name) VALUES(myseq.nextval,'HELLO');

以上的操作为序列在实际开发之中使用最多的一种情况,但是从序列的创建语法来讲并不是这么简单。

        首先需要来解决缓存的作用是什么?

        在序列的操作过程之中,为了保证序列的性能问题,所以会利用缓存,在用户未使用到指定的序列值时,自动地将内容创建好,这样用户在使用序列中就不是一起创建的了,从而达到性能的提升。

        但是缓存本身会存在丢号的问题,如果数据库关闭了,那么序列的内容就可能无法连续了,称为跳号问题(就比如今天序列的值到20,然后数据库关闭了,那么明天再打开的时候不是从21开始的,而是从41开始)

        但是以上所创建的只是标准的序列操作,而实际上序列也可以创建一些特殊情况。

序列数据字典之中的LAST_NUMBER它的结果是缓存个数*步长

序列在序列的使用过程之中还可以创建循环序列的概念,例如现在希望序列可以在1、3、5、7、9之间循环显示,所以此时就需要设置序列的最大值:9  最小值:1  而且设置为循环。

序列需要注意缓存的值必须要小于cycle的值