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: 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
值得注意的是,序列与表格是没有直接关系的。换句话说,一个序列可以用于为多个表格产生主键值,即使它被应用于不同的表格,该序列仍然继续。例如,假设我们有第二个表格,名为NEW_USERS,其结构与USER_TABLE 相同,我们在执行上述两个SQL 命令后发出以下SQL命令: INSERT INTO NEW_USER VALUES (SEQ_USER.NEXTVAL, 'Adams', 'John');
NEW_USER 表格将拥有以下这一笔资料: Table NEW_USER
Userid 为15,因为这是10之后的下一个值。 |