SQL SEQUENCE 和 NEXTVAL



Oracle 使用 SEQUENCE 概念来创建数值主键值,当我们将数据行添加到表格中时。在 MySQL 和 SQL Server 中,数值主键的生成与个别表格相关,但在 Oracle 中,SEQUENCE 构造是单独创建的,并不与特定的表格相关。

语法

在 Oracle 中创建 SEQUENCE 的语法如下

CREATE SEQUENCE SEQUENCE_NAME
[START WITH {Initial_Value}]
[INCREMENT BY {interval}];

{Initial_Value}是序列的起始值,而{interval}是连续序列号之间的间隔。 [START WITH] 和 [INCREMENT BY] 都是可选字段。如果未指定,系统会将 {Initial_Value} 和 {interval} 都设为1。

范例

举例来说,假设我们有一个具有以下结构的表格:

Table USER_TABLE
 栏位名称  资料种类 
 Userid  integer 
 Last_Name  varchar(50) 
 First_Name  varchar(50) 

并且我们想使用以下序列生成 userid:

CREATE SEQUENCE SEQ_USER START WITH 5 INCREMENT BY 5;

我们指定我们想要在 INSERT INTO 语句中使用序列和 NEXTVAL 函数的顺序如下:

INSERT INTO USER_TABLE VALUES (SEQ_USER.NEXTVAL, 'Washington', 'George');

INSERT INTO USER_TABLE VALUES (SEQ_USER.NEXTVAL, 'Jefferson', 'Thomas');

现在,该表格会有以下两笔资料:

Table USER_TABLE
 Userid  Last_Name  First_Name 
 5  Washington  George 
 10  Jefferson  Thomas 

值得注意的是,序列与表格是没有直接关系的。换句话说,一个序列可以用于为多个表格产生主键值,即使它被应用于不同的表格,该序列仍然继续。例如,假设我们有第二个表格,名为NEW_USERS,其结构与USER_TABLE 相同,我们在执行上述两个SQL 命令后发出以下SQL命令:

INSERT INTO NEW_USER VALUES (SEQ_USER.NEXTVAL, 'Adams', 'John');

NEW_USER 表格将拥有以下这一笔资料:

Table NEW_USER
 Userid  Last_Name  First_Name 
 15  Adams  John 

Userid 为15,因为这是10之后的下一个值。

SQL Concatenate 函数 >>

本页最近于 2023年12月26日更新



Copyright © 2024   1keydata.com   All Rights Reserved.