搜索
首页数据库mysql教程Oracle DB序列_MySQL

bitsCN.com

Oracle DB序列

 

序列是一个用于创建整数值的数据库对象。可以创建序列,然后再用其生成编号。

序列具有如下特点:

• 可以自动生成唯一编号

• 是一个可共享的对象

• 可用于创建主键值

• 替换应用程序代码

• 如果将序列高速缓存到内存中,则访问序列值的效率会有所提高

 

序列是用户创建的数据库对象,可由多个用户共享来生成整数。

可以通过定义一个序列来生成唯一值,或者回收编号后重新使用相同的编号。

序列的常见用途是创建主键值,每行的主键值必须是唯一的。序列由内部Oracle  例行程序按递增(或递减)方式生成。由于可以减少编写生成序列的例行程序所需的应用程序代码量,因此使用该对象可以节省一些时间。

序列号的存储和生成与表无关。因此,同一序列可以用于多个表。

 

CREATE SEQUENCE 语句:语法

定义一个可以自动生成序号的序列:

CREATE SEQUENCE sequence[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE  n | NOCACHE}];

 

 

通过使用CREATE SEQUENCE语句可以自动生成序号。

在该语法中:

sequence:是序列生成器的名称

INCREMENT BY  n: 指定序列号之间的间隔,其中n 是一个整数(如果省略此子句,则序列按1  递增)

START WITH  n: 指定要生成的第一个序列号(如果省略此子句,则序列从1  开始)

MAXVALUE n: 指定序列可以生成的最大值

NOMAXVALUE 指定10^27  作为递增序列的最大值,而-1 作为递减序列的最大值(这是默认选项)

MINVALUE n :指定最小的序列值

NOMINVALUE :指定1  作为递增序列的最小值,而-(10^26)  作为递减序列的最小值(这是默认选项)

 

创建序列

• 创建一个名为DEPT_DEPTID_SEQ的序列,将其用作DEPARTMENTS 表的主键。

• 不使用CYCLE选项。

sys@TEST0924> CREATE SEQUENCE dept_deptid_seq  2  INCREMENT BY 10  3  START WITH 120  4  MAXVALUE 9999  5  NOCACHE  6  NOCYCLE  7  ;Sequence created.

 

CYCLE | NOCYCLE :指定在达到最大值或最小值之后,序列是否继续生成值(NOCYCLE是默认选项)

CACHE  n | NOCACHE :指定Oracle Server  预先分配并保留在内存中的值的数量(默认情况下,Oracle Server  会高速缓存20 个值)

示例中创建了一个名为DEPT_DEPTID_SEQ的序列,用作DEPARTMENTS 表的DEPARTMENT_ID 列。该序列从120  开始,不允许高速缓存,也不进行循环。

请勿在序列用于生成主键值时使用CYCLE选项,除非有一个可靠的机制与序列循环相比可以更快地清除旧行。

注:序列与表没有关系。通常,应按序列的预期用途来命名序列。但是,序列可以在任何地方使用,而与其名称无关。

 

NEXTVAL和CURRVAL伪列

• NEXTVAL会返回下一个可用的序列值。每次被引用时NEXTVAL都会返回一个唯一值,即使对于不同用户也是如此。

• CURRVAL会获得当前序列值。

• 只有对序列发出NEXTVAL之后,CURRVAL才能包含值。

 

在创建一个序列之后,该序列会生成可以在表中使用的序号。通过使用NEXTVAL和CURRVAL伪列可以引用序列值。

NEXTVAL伪列用于从指定的序列中提取连续的序列号。必须用序列名来限定NEXTVAL。

在引用sequence .NEXTVAL 时,就会生成新的序列号,还会将当前的序列号放在CURRVAL中。

CURRVAL伪列用于引用当前用户刚刚生成的序列号。但是,必须先用NEXTVAL在当前用户的会话中生成一个序列号,然后才能引用CURRVAL。必须用序列名来限定CURRVAL。

在引用sequence .CURRVAL 时,会显示返回给用户进程的最后一个值。

 

使用NEXTVAL和CURRVAL的规则

可以在下列上下文中使用NEXTVAL和CURRVAL:

• 不是子查询一部分的SELECT 语句的SELECT 列表

• INSERT 语句中子查询的SELECT 列表

• INSERT 语句的VALUES 子句

• UPDATE 语句的SET 子句

 

不能在下列上下文中使用NEXTVAL和CURRVAL:

• 视图的SELECT 列表

• 带有DISTINCT 关键字的SELECT 语句

• 带有GROUP BY 、HAVING 或ORDER BY 子句的SELECT 语句

• SELECT 、DELETE 或UPDATE 语句中的子查询

• CREATE TABLE或ALTER TABLE 语句中的DEFAULT表达式

 

使用序列

• 在位置ID 2500  中插入一个名为“Support”的新部门:

sys@TEST0924> INSERT INTO hr.departments(department_id, department_name,location_id)  2  VALUES  (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.

 

它使用DEPT_DEPTID_SEQ序列生成280的新部门编号。

 

• 使用sequence_name.CURRVAL查看DEPT_DEPTID_SEQ序列的当前值:

sys@TEST0924> SELECT dept_deptid_seq.CURRVAL FROM dual;   CURRVAL----------       280

 

 

假定现在要聘用某些雇员作为新部门的工作人员。在要对所有新雇员执行的INSERT语句中可以包含以下代码:

INSERT INTO employees (employee_id, department_id, ...)VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...);

 

注:上面的示例假设已经创建一个名为 EMPLOYEE_SEQ的序列来生成新雇员编号。

 

高速缓存序列值

• 将序列值高速缓存在内存中,这样可以更快地对这些值进行访问。

• 在发生以下情况时,序列值会出现间断:

– 发生回退

– 系统崩溃

– 序列已用于其它表中

 

可以将序列高速缓存在内存中,以便于更快地对这些值进行访问。当首次引用序列时,序列值会被填充到高速缓存中。因此会从高速缓存序列中检索每次请求的下一个新序列值。用完最后一个序列值之后,就会在下一次请求序列时将序列的另一个高速缓存拖入到内存中。

序列中的间断

虽然序列生成器会发出没有间断的序号,但是此操作的发生与提交或回退有关。因此,如果你回退一条包含序列的语句,则会丢失相应的序号。

另一个可能导致序列出现间断的事件是系统崩溃。如果序列值已高速缓存在内存中,那么在系统崩溃时就会丢失一些值。

因为序列不直接与表相关联,所以同一序列可用于多个表。但是,如果同一序列用于多个表,则每个表的序号可能会有间断。

 

修改序列

更改增量值、最大值、最小值、循环选项或高速缓存选项:

sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq  2  INCREMENT BY 20  3  MAXVALUE 999999  4  NOCACHE  5  NOCYCLE;Sequence altered.

 

 

如果序列达到MAXVALUE 限制,则序列不会再分配额外的值,此时你会收到一条错误消息,指明序列超出了MAXVALUE 。要继续使用该序列,可以使用ALTER SEQUENCE语句修改该序列。

语法

ALTER  SEQUENCE sequence[INCREMENT BY n ][{MAXVALUE  n | NOMAXVALUE}][{MINVALUE  n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE  n | NOCACHE}];

 

在此语法中,sequence 是序列生成器的名称。

 

修改序列的准则

• 你必须是序列的所有者或拥有序列的ALTER权限。

• 修改只会影响以后生成的序列号。

• 如果要从另一编号处重新开始,则必须删除原有序列后重新创建。

• 在修改过程中会执行一些验证操作。

• 要删除序列,请使用DROP 语句:

sys@TEST0924> DROP SEQUENCE dept_deptid_seq;Sequence dropped.

 

 

• 要修改一个序列,你必须是此序列的所有者或拥有序列的ALTER权限。要删除一个序列,你必须是此序列的所有者或拥有此序列的DROP ANY SEQUENCE权限。

• ALTER SEQUENCE 语句只会影响以后生成的序列号。

• 使用ALTER SEQUENCE 语句不能更改START WITH选项。如果要从另一编号处重新开始,则必须删除原有序列后重新创建。

• 在修改过程中会执行一些验证操作。例如,不能强制实施一个小于当前序列号的新MAXVALUE 。

ALTER SEQUENCE dept_deptid_seqINCREMENT BY 20MAXVALUE 90NOCACHENOCYCLE;• 错误:sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq  2  INCREMENT BY 20  3  MAXVALUE 99  4  NOCACHE  5  NOCYCLE;ALTER SEQUENCE  dept_deptid_seq*ERROR at line 1:ORA-04009: MAXVALUE cannot be made to be less than the current value

 


bitsCN.com
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是什么数据库sybase是什么数据库Sep 22, 2021 am 11:39 AM

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是什么visual foxpro数据库文件是什么Jul 23, 2021 pm 04:53 PM

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

microsoft sql server是什么软件microsoft sql server是什么软件Feb 28, 2023 pm 03:00 PM

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

数据库的什么是指数据的正确性和相容性数据库的什么是指数据的正确性和相容性Jul 04, 2022 pm 04:59 PM

数据库的“完整性”是指数据的正确性和相容性。完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。完整性对于数据库系统的重要性:1、数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;2、合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能;3、完善的数据库完整性有助于尽早发现应用软件的错误。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具