首页 > 代码库 > 序列(学习笔记)
序列(学习笔记)
序列的作用
许多的数据库之中都会为用户提供一种自动增长列的操作
序列(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_sequencesSELECT * 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_sequencesSELECT * 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_sequencesSELECT * 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 myseqSTART WITH 1INCREMENT BY 2MAXVALUE 10MINVALUE 1CYCLECACHE 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) );
小结:
- 利用序列可以实现自动增长列的功能;
- 序列的两个伪列:nextval、currval;
- Oracle 12C之后提供了自动序列。
序列(学习笔记)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。