概念:
所謂序列,在oracle中就是一個對象,這個對象用來提供一個有序的數據列,這個有序的數據列的值都不重復。
1.序列可以自動生成唯一值
2.是一個可以被共享的對象
3.典型的用來生成主鍵值的一個對象
4.可以替代應用程序代碼
5.當sequence的值存放在緩存中時可以提高訪問效率。
創建序列語法:
CREATE SEQUENCE name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
note:
1.increment by n:表明值每次增長n(步長)
2.start with n: 從n開始
3.{MAXVALUE n | NOMAXVALUE}: 設置最大值
4.{MINVALUE n | NOMINVALUE}: 設置最小值,start with不能小於最小值。
5.CYCLE | NOCYCLE : 是否循環,建議不使用
6.CACHE n | NOCACHE : 是否啟用緩存。
例如:
create sequence emp_id_seq
start with 1
increment by 1
nomaxvalue
nominvalue
nocycle
nocache;
note:可以通過數據字典user_sequences查看當前用戶所擁有的序列信息。
例如:
select sequence_name,min_value,max_value,last_number
from user_sequences
where sequence_name = 'EMP_ID_SEQ';
序列的屬性(偽列):
1.nextval : 返回下一個可用的序列值。
就算是被不同的用戶調用,每次也返回一個唯一的值。
2.currval :獲取序列當前的值。
在currval調用之前,必須保證nextval已經獲取過一次值。
使用sequence:
例如:
1.向表中插入數據
insert into emp values(emp_id_seq.nextval);
2.查看序列的當前值
select emp_id_seq.currval from dual;
3.獲取序列的下一個值。
select emp_id_seq.nextval from dual;
緩存:
使用緩存可以提高sequence的訪問效率
修改sequence:
ALTER SEQUENCE name
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
note:
1.必須是序列的擁有者,或者具有alter權限
2.修改后的序列,只對之后的值起作用。
3.不能修改start with,如果想改,只能刪除,重新創建,啟動。
刪除sequence:
drop sequence seq_name;
例如:
drop sequence emp_id_seq;