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;