Fork me on GitHub

序列(学习笔记)

序列的作用

 

许多的数据库之中都会为用户提供一种自动增长列的操作
序列(Sequence)可以自动的按照即定的规则实现数据的编号操作
序列的完整创建语法
CREATE SEQUENCE 序列名称
        [ INCREMENT BY 步长 ]
        [ START WITH 开始值 ]
        [ MAXVALUE 最大值 | NOMAXVALUE ]
        [ MINVALUE 最小值 | NOMINVALUE ]
        [ CYCLE | NOCYCLE ]
        [ CACHE 缓存大小 | NOCACHE ] ;
创建默认序列的语法
CREATE SEQUENCE 序列名称
示例一、创建一个myseq默认序列
CREATE SEQUENCE myseq
--查询user_sequence数据字典
SELECT * FROM user_sequences;

各个主要属性内容如下:
SEQUENCE_NAME:表示序列的名称,此处的名称为之前创建的“MYSEQ”;
MIN_VALUE:此序列开始的默认最小值(默认是0);
MAX_VALUE:此序列增长的默认最大值(默认是999999999999999999999999999);
INCREMENT_BY:序列每次增长的步长(默认是1);
CYCLE_FLAG:循环标记,如果是循环序列则显示“Y”,非循环序列则显示为“N”(默认是“N”);
CACHE_SIZE:序列操作的缓存量(默认是20);
LAST_NUMBER:最后一次操作的数值;
示例二、通过currvar和nextal属性操作
--连接执行2次
SELECT myseq.nextval FROM dual;
--当前的序列
SELECT myseq.currval FROM dual;

序列名称.currval:表示取得当前序列已经增长的结果,重复调用多次后序列内容不会有任何变化,同时当前序列的大小(LAST_NUMBER)不会改变;
序列名称.nextval:表示取得一个序列的下一次增长值,每调用一次,序列都会自动增长

示例三、使用序列在插入数据时
--创建member表
CREATE TABLE MEMBER(
       mid    NUMBER,
       NAME  VARCHAR2(50)  NOT NULL,
       CONSTRAINT pd_mid PRIMARY KEY(mid)
 );
 --查询表
 SELECT * FROM MEMBER;
 --插入数据
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'张三丰');
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'张翠山');
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'张无忌');
  --查询表
 SELECT * FROM MEMBER;
 --发现MID会自动增加

删除序列

DROP SEQUENCE 序列名

--删除myseq序列
DROP SEQUENCE myseq;

创建特殊功能的序列

  • 设置序列的增长步长 INCREMENT BY

语法:

CREATE SEQUENCE 序列名 INCREMENT BY 步长

示例四、创建序列步长为3

CREATE SEQUENCE myseq INCREMENT BY 3;
--查询user_sequences
SELECT * FROM User_Sequences;
--步长已经为3
--调用myseq序列
--连接执行
SELECT myseq.nextval FROM dual;
--查看当前的序列
SELECT myseq.currval FROM dual;
  •  设置序列的初始值START WITH

语法:

 CREATE SEQUENCE 序列名 START WITH 初始值

示例五、创建序初始值为30,每次步长2

 

DROP SEQUENCE myseq;
 CREATE SEQUENCE myseq START WITH 30 INCREMENT BY 2;
 --查询user_sequences
SELECT * FROM User_Sequences;
--初始值为30,步长已经为2
--调用myseq序列
--连接执行
SELECT myseq.nextval FROM dual;
--查看当前的序列
SELECT myseq.currval FROM dual;

 

  • 设置序列的缓存CACHE |NOCACHE

语法:
CREATE SEQUENCE 序列名称 CACHE 缓存大小 | NOCACHE

示例六、创建序列,缓存设置为100和不使用缓存

DROP SEQUENCE myseq;
--创建序列使用缓存
CREATE SEQUENCE myseq CACHE 100;
--查询user_sequences
SELECT * FROM User_Sequences;
--创建序列,不使用缓存
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq NOCACHE;
--测试
SELECT myseq.nextval FROM dual;
  • 设置循环序列

语法:

CREATE SEQUENCE 序列名称
[ MAXVALUE 序列最大值 | NOMAXVALUE ]
[ MINVALUE 序列最小值 | NOMINVALUE ]
[ CYCLE | NOCYCLE ] ;
示例七、创建循环序列,让序列的内容在1、3、5、7、9之间循环
DROP SEQUENCE myseq;
--创建序列
CREATE SEQUENCE myseq
START WITH 1
INCREMENT BY 2
MAXVALUE 10
MINVALUE 1
CYCLE
CACHE 3;
--多次执行
SELECT myseq.nextval FROM dual;

修改序列:

序列本身也属于一个数据库的对象,而只要是数据库的对象,那么在创建之后都可以对其进行修改,而序列的修改语法如下
ALTER SEQUENCE 序列名称
        [ INCREMENT BY 步长]
        [ MAXVALUE 最大值 | NOMAXVALUE ]
        [ MINVALUE 最小值 | NOMINVALUE ]
        [ CYCLE | NOCYCLE ]
        [ CACHE 缓存大小 | NOCACHE ] ;

修改和设置方式一样,只是将CREATE换为了ALTER

Oracle 12C之后提供了自动序列,在创建表中创建

自动序列语法

CREATE TABLE 表名称 (
        列名称    类型    GENERATED BY DEFAULT AS IDENTITY ([ INCREMENT BY 步长 ]
                     [ START WITH 开始值 ]
                       [ MAXVALUE 最大值 | NOMAXVALUE ]
                        [ MINVALUE 最小值 | NOMINVALUE ]
                       [ CYCLE | NOCYCLE ]
                       [ CACHE 缓存大小 | NOCACHE ]) ,
        列名称    类型 ,…
    ) ;
 

示例八、创建带有自动增长列的数据表

CREATE TABLE mytab(
       mid               NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1),
       NAME              VARCHAR2(20)     NOT NULL;
       CONSTRAINT pd_mymid PRIMARY KEY(mid)
       
);

     小结:

  1. 利用序列可以实现自动增长列的功能;
  2. 序列的两个伪列:nextval、currval;
  3. Oracle 12C之后提供了自动序列。

 


 

 

posted @ 2015-01-13 18:14  森林森  阅读(1155)  评论(0编辑  收藏  举报