• 序列(学习笔记)


    序列的作用

     

    许多的数据库之中都会为用户提供一种自动增长列的操作
    序列(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之后提供了自动序列。

     

    
    
     

     

  • 相关阅读:
    Linux根目录各个文件夹介绍及说明
    CentOS7 yum方式安装MySQL5.7
    spring-boot 启动图标修改-启动彩蛋
    Android 4.4从图库选择图片,获取图片路径并裁剪
    Android开发之获取相册照片和获取拍照照片二
    Android开发之获取相册照片和获取拍照照片
    httpclient 发送文件和字符串信息
    HttpURLConnection 发送 文件和字符串信息
    Android中使用HTTP服务
    android http json请求3种不同写法
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4221876.html
Copyright © 2020-2023  润新知