序列的使用

目录

序列的创建

序列的使


Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

在许多数据库之中都会存在有一种数据类型 — 自动增长列,它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列,可以使用序列的方式完成

序列的创建

create sequence 序列名称
[MAXVALUE 最大值 | NOMAXVALUE]
[MINVALUE 最小值 | NOMINVALUE]
[INCREMENT BY 步长 ] [START WITH 开始值 ]
[CYCLE | NOCYCLE]
[CACHE 缓存个数 | NOCACHE] ;

MAXVALUE :可选项,定义序列的最大值

MINVALUE :可选项,定义序列的最小值

START WITH 开始值:可选项,定义序列的开始值

INCREMENT BY 步长:可选项,定义序列每次增加值

CYCLE :可选项,表示当序列增加到最大值或者减少到最小值的时候,重新从开始值继续

CACHE :可选项,表示是否产生序列号预分配,并存储在内存中

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

CREATE SEQUENCE myseq ;

 上面代码创建一个序列,名字为 myseq,所有参数都取默认值

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

SELECT * FROM user_sequences ;

SEQUENCE_NAME :序列名称,本次为 MYSEQ

MIN_VALUE :当前序列的最小值,本次为 1

MAX_VALUE :当前序列的最大值,本次为“1.0000E+28”

INCREMENT_BY :每次序列增长的步长内容

CY :是否为循环序列,本次为“N”

OR :是否需要排序

CACHE_SIZE :缓存个数,默认为 20 个

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

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

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

只有运行了 nextval 之后才表示内容真正可以使用 

序列的使

CREATE TABLE mytab(
	id		NUMBER ,
	name	VARCHAR2(50)  ,
	CONSTRAINT pk_id PRIMARY KEY(id)
) ;

 此时的数据表与原始相比没有任何区别,但是在数据增加的时候,由于 id 属于一个主键列,所以可以利用序列来生成 id 的内容

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

以上的操作是序列在实际开发中使用最多的一种情况,但是从序列的创建语法来讲,并不是这么简单,所以下面需要对序列进行进一步的分析

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

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

但是缓存本身会存在一个丢号的问题,如果数据库关闭了,那么序列的内容就可能无法连续了,称此为丢号问题

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

DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq 
INCREMENT BY 2 ;

上面代码中,“DROP SEQUENCE myseq ”表示删除序列的代码,然后创建一个新的序列,步长为 2

DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq 
INCREMENT BY 2
START WITH 100000 ;

上面代码中,创建的序列开始值为 100000,增加的步长为 2。

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

DROP SEQUENCE myseq ;
CREATE SEQUENCE myseq 
INCREMENT BY 2 START WITH 1 
MINVALUE 1 MAXVALUE 9
CYCLE NOCACHE;

从实际情况来说,序列的使用往往都不需要这么复杂,生成一个流水号就够了

相关推荐

  1. [DM8] 序列使用说明

    2024-03-23 06:58:04       57 阅读
  2. Oracle/DM序列基本使用

    2024-03-23 06:58:04       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 06:58:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 06:58:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 06:58:04       87 阅读
  4. Python语言-面向对象

    2024-03-23 06:58:04       96 阅读

热门阅读

  1. pta 7-31 字符串循环左移 C语言

    2024-03-23 06:58:04       33 阅读
  2. 关于Pyqt更换资源内容运行软件不生效的解决办法

    2024-03-23 06:58:04       37 阅读
  3. Elasticsearch 的 scroll API

    2024-03-23 06:58:04       36 阅读
  4. nju cs上机

    2024-03-23 06:58:04       43 阅读
  5. 路漫漫其修远兮,吾将上下而求索

    2024-03-23 06:58:04       45 阅读
  6. 十一.matplotlib可视化

    2024-03-23 06:58:04       39 阅读
  7. 正则表达式

    2024-03-23 06:58:04       36 阅读
  8. opencv模板匹配

    2024-03-23 06:58:04       45 阅读
  9. 从HTTP到QUIC:网络协议的演进与优化

    2024-03-23 06:58:04       43 阅读