108.Oracle数据库SQL开发之 序列

来源:互联网 发布:网络错误代码-7 编辑:程序博客网 时间:2024/05/21 14:12

108.Oracle数据库SQL开发之 序列

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50043051

序列是一种数据库项,它生成一个整数序列。序列所生成的整数通常可以用来填充数字类型的主键列。

1.  创建序列

使用CREATE SEQUENCE语句可以用来创建序列。

语法如下:

CREATE SEQUENCE sequence_name

[START WITH start_num]

[INCREMENT BY increment_num]

……

例如:

store@PDB1> create sequence s_test;

 

Sequence created.

其实数字start_num和增量increment_num都被设置为默认值1.

 

store@PDB1> create sequence s_test2 start with 10increment by 5 minvalue 10 maxvalue 20 cycle cache 2 order;

 

Sequence created.

 

2.  获取有关序列的信息

从user_sequences视图中更可以获得有关序列的信息

store@PDB1> column sequence_name format a13

store@PDB1> select * from user_sequences order bysequence_name;

 

SEQUENCE_NAME  MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K

------------- ---------- ---------------------- - - ---------- ----------- --------------- - -

S_TEST                      1 1.0000E+28            1 N N      20            1                N N

S_TEST2       10         20        5 Y Y         2           10                N N

3.  使用序列

序列生成一系列数字。一个序列中包含两个伪列,分别是currval和nextval.

store@PDB1> select s_test.nextval from dual;

 

  NEXTVAL

----------

          1

store@PDB1> select s_test.currval from dual;

 

  CURRVAL

----------

          1

store@PDB1> select s_test.nextval,s_test.currvalfrom dual;

 

  NEXTVAL    CURRVAL

---------- ----------

          2         2

store@PDB1> select s_test2.nextval from dual;

 

  NEXTVAL

----------

         10

store@PDB1> select s_test2.nextval from dual;

 

  NEXTVAL

----------

         15

4.  使用序列填充主键

当表的主键是整数时,通常使用序列来生成主键。

如下:

store@PDB1> create table order_status2 ( idINTEGER CONSTRAINT order_status2_pk primary key,statusvarchar2(10),last_modified date default sysdate);

 

Table created.

创建一个序列

store@PDB1> create sequence s_order_status2nocache;

 

Sequence created.

在使用序列填充主键列时,通常应该使用NOCACHE选项,这样可以避免序列产生不连续的情况。使用NOCACHE会降低性能。如果能够容忍主键值不连续,那么就考虑使用CACHE。

插入如下:

store@PDB1> insert intoorder_status2(id,status,last_modified )

    values (s_order_status2.nextval,'PLACED','01-JAN-2006');

 

1 row created.

 

store@PDB1> insert intoorder_status2(id,status,last_modified )

    values (s_order_status2.nextval,'PENDING','01-FEB-2006');

 

1 row created.

查看如下:

store@PDB1> select * from order_status2;

 

         IDSTATUS     LAST_MODI

---------- ---------- ---------

          1 PLACED    01-JAN-06

          2 PENDING   01-FEB-06

5.  修改序列

ALTER SEQUENCE语句可以用来修改序列。修改序列时,可以修改的序列内容有如下限制:

l  不能修改序列的初值

l  序列的最小值不能大于当前值

l  序列的最大值不能小于当前值

store@PDB1> alter sequence s_test increment by 2;

 

Sequence altered.

使用如下:

store@PDB1> select s_test.nextval from dual;

 

  NEXTVAL

----------

          4

 

store@PDB1> select s_test.nextval from dual;

 

  NEXTVAL

----------

          6

6.  删除序列

DROP SEQUENCE可以用来删除序列,如下:

DROP SEQUENCE s_test3;

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击