SQL SEQUENCES

2025年2月3日 | 阅读 5 分钟

在本文中,我们将详细阐述 SQL 中序列的概念。

引言

组织和个人都依赖于日益增长的独特、标识信息。采购订单号、客户号和支票号都是很好的例子,其中每个号都由唯一的、递增的数字标识。

它是一个用户创建的数据库对象。序列主要用于创建唯一的整数值并自动生成主键值。它们最常通过 INSERT 和 UPDATE 语句访问,较少通过 SELECT 语句访问。

我们可以多次使用同一个序列,因此我们可以独立于表存储和生成它。

以下是创建序列的语法

在上面的语法中,

  • CREATE: 用于创建序列。
  • INCREMENT BY: 指定序列号之间的间隔,这些序列号是整数值,可以是正整数或负整数,用于升序/降序序列,但不能为零。默认情况下,其值递增 1。
  • START WITH: 这是序列开始的数字。默认值是降序序列的 MAXVALUE 和升序序列的 MINVALUE。
  • MINVALUE: 此参数用于存储序列将生成的最小值。其值必须大于或等于 START WITH 并且小于 START WITH。
  • MAXVALUE: 指定序列可以生成的最高数字。
  • CYCLE: 此参数指示序列有多少个值。其最小值存储为 2。默认值为 20 个数字。
  • CACHE: 指定序列有多少个值。最小值必须为 2。默认值为 20 个数字。
  • NOCYCLE: 指示达到最大值或最小值后无法生成值。
  • NOCACHE: 指定序列的值不会被预先分配。
  • ORDER: 这保证了请求将按照接收顺序被分配序列号。

升序创建序列的示例

执行上述查询后,SQL 将创建一个名为 EMP_ID 的序列,从值 100 开始,以排序顺序递增序列号 1(即 101、102、103...)。序列可以生成的最大值为 200。

降序创建序列的示例

执行上述查询后,SQL 将创建一个名为 EMP_ID 的序列,从值 100 开始,以排序顺序递增序列号 1(即 100、99、98、97...)。序列可以生成的最大值为 100。

以下示例用于向序列插入数据

首先创建一个名为 EMP 的表,其中包含 Empno、Ename、Sal 列。

CREATE TABLE EMP_data (

Empno int(10),

name varchar(40),

Sal int(10));

现在向表中插入值

Insert into EMP_data (Empno, Ename, Sal) values (Emp_Id.NEXTVAL, 'Shama', '24000');

Insert into EMP_data (Empno, Ename, Sal) values (Emp_Id.NEXTVAL, 'Heena', '34000');

Insert into EMP_data (Empno, Ename, Sal) values (Emp_Id.NEXTVAL, 'Neena', '30000');

已创建 3 行

您可以使用 2 个伪列在 SQL 语句中引用序列值。

  • CURRVAL: 此伪列返回序列的当前值。例如: EMP_ID.CURRVAL;
  • NEXTVAL: 此伪列用于递增序列并返回下一个值。例如: EMP_ID.NEXTVAL;

首先使用序列,并且其值必须使用 <sequence_name> 设置。NEXTVAL。首次引用 NEXTVAL 将返回序列的初始值,下一次引用将按定义的增量递增序列值并返回新值。由于 CURRVAL 返回由 CURVAL 的最后一次引用引用的值,因此在使用它之前必须使用 NEXTVAL 启动序列。

例如

首次执行时,它将返回 100,即 START WITH 值。每次进一步执行时,它将比前一个值增加 1。

序列的用途

  • Oracle 中使用序列,因为序列的 NEXTVAL 伪列可用于向表的主键列插入唯一值。因此,要将记录插入 EMP 表,我们使用。

    执行后,它会将序列 Emp_Id 的下一个值插入到表 EMPNO 列的值中。
  • 序列的 CURRVAL 伪列的主要用途是当存在主键表和外键表时。因此,我们可以使用 <sequence_name>。NEXTVAL 向主键表添加值,也可以使用 <sequence_name>。CURRVAL 在不同的 INSERT 语句中向外键表添加行。

ALTER SEQUNCE

您也可以像编辑表一样编辑序列。可以通过 MINVALUE、MAXVALUE、CYCLE、NOCYECLE、ORDER 参数更改序列的增量。这些更改将立即生效。

以下是 Alter 序列的语法

以下是更改序列的示例

ALTER SEQUENCE EMP_ID MAXVALUE 1500;

更改序列时适用的限制是

  • 如果您想这样做,则无法从不同的数字开始,必须跳过该序列并重新构建它。
  • 新的 MAXVALUE 参数不能小于当前的序列号。

DROP A SEQUNCE

当不再需要序列时,可以删除它。

以下是删除序列的语法

DROP SEQUENCE <sequence_name>;

以下是删除序列的示例

DROP SEQUENCE EMP_ID;

序列已删除;

VIEW SEQUNCE

要查看由特定用户生成的序列,我们可以使用 USER_SEQUENCES 来查看所有者拥有的所有序列。

以下是查看序列的语法

USER_SEQUENCES;

以下是查看序列的示例

Select * from USER_SEQUENCES;

SQL 序列选择题

1. 以下哪个语句用于更改 SQL 序列?

  1. ALTER SEQUENCE sequence_name MAXVALUE 1500;
  2. ALTER SEQUENCE MAXVALUE 1500;
  3. ALTER sequence_name MAXVALUE 1500;
  4. ALTER SEQUENCE sequence_name MAXVALUE;

答案:a

解释:以下语句用于创建 SQL 序列。

ALTER SEQUENCE sequence_name MAXVALUE 1500;


2. 以下哪个伪列用于从 SQL 序列中选择当前值?

  1. CURRENTVALUE;
  2. CURRVALUE;
  3. CURRVAL;
  4. CURRENTVAL;

答案:c

解释:CURRVAL 返回序列的当前值。


3. 以下哪个语法用于删除 SQL 序列?

  1. DROP <sequence_name>;
  2. DROP SEQUENCE <sequence_name>;
  3. DROP SEQUENCE <sequence_name>
  4. DROP SEQUENCE;

答案:b

解释:以下语法用于删除 SQL 序列。

DROP SEQUENCE <sequence_name>;


4. 序列对象是否可以作为创建表中唯一整数值的替代方法?

  1. 是的
  2. 不能

答案:a

解释:是的,SQL 序列用于在表中创建唯一的整数值。


下一个主题SQL 同义词