序列(学习笔记)

序列的作用

许多的数据库之中都会为用户提供一种自动增长列的操作

序列(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之后提供了自动序列。
				
时间: 2024-08-15 23:47:14

序列(学习笔记)的相关文章

python基础教程_学习笔记2:序列-2

序列-2 通用序列操作 序列相加 通过加号对列表进行连接操作: 列表 >>> [1,3,4]+[2,5,8] [1, 3, 4, 2, 5, 8] 字符串 >>> '134'+'258' '134258' 元组 >>> (1,2,3)+(2,5,8) (1, 2, 3, 2, 5, 8) 元素数据类型不同的列表 >>> [[1,3],[3,9]]+[[2,2],'abc'] [[1, 3], [3, 9], [2, 2], 'abc'

python基础教程_学习笔记8:序列_练习与总结_1

序列_练习与总结 每次处理一个字符 任务: 用每次处理一个字符的方式处理字符串. 方案: 可以创建一个列表,列表的子项是字符串的字符.python实际上并没有一个特别的类型来对应"字符"并以此和字符串区分开来.可以调用内建的list,用字符串作为参数: thelist=list(thestring) 也可以不创建一个列表,直接用for语句完成对该字符串的循环遍历: for c in thestring: do_something_with(c) 或者使用列表推导中的for来遍历: re

Python学习笔记----序列共性

序列操作符 作用seq[ind] 获得下标为ind 的元素seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合seq * expr 序列重复expr 次seq1 + seq2 连接序列seq1 和seq2obj in seq 判断obj 元素是否包含在seq 中 obj not in seq 判断obj 元素是否不包含在seq 中 1.连接符(+):将一个序列和另外一个相同的序列做连接 这种方式连接序列不是最快的, 对于字符串来说,不如将所有字符串放在一个列表或者可迭代对象

python基础教程_学习笔记:序列-1

序列 数据结构:通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构. python中,最基本的数据结构是序列. 序列中的每个元素被分配一个序号--即元素的位置,也称为索引.第一个索引是0,第二个是1,以此类推. 序列概览 python包含6种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象. 列表和元组的主要区别在于,列表可以修改,元组不能. 使用后者的理由通常是技术性的,它与python内部的运作方式有关.这也

C++ Socket 学习笔记

Socket学习笔记 以下均为整理,做参考之用. IP Address IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP地址被用来给Internet上的电脑一个编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把"个人电脑"比作"

iOS学习笔记之UITableViewController&UITableView

iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论文,因此需要继续思考新的算法.这是一件挺痛苦的事情,特别是在很难找到与自己研究方向相关的文献的时候.也许网格序列水印这个课题本身的研究意义就是有待考证的.尽管如此,还是要努力的思考下去.由于实验室的原因,iOS的学习进度明显受到影响,加之整理文档本身是一件耗费时间和精力的事情,因此才这么久没有写笔记了. M

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

《语义网基础教程》学习笔记(二)

二.RDF概述(参考http://zh.transwiki.org/cn/rdfprimer.htm) 1.本体: 一个本体是一个概念体系(conceptualization)的显式的形式化规范. 一般来说,一个本体形式地刻画一个论域.一个典型的本体由有限个术语及它们之间的关系组成. ★在万维网这个环境中,本体提供了对给定领域的一种共识.这种共识对于消除术语差别是必要的. 通过把各自的术语差异映射到一个公共的本体之间的直接映射,可以消除这些术语差异. 不管采用哪种方案,本体都支持语义可共用性(s