序列: 是oacle提供的用於產生一系列唯一數字的資料庫物件。
l 自動提供唯一的數值
l 共享物件
l 主要用於提供主鍵值
l 將序列值裝入記憶體可以提高訪問效率
建立序列:
1、 要有建立序列的許可權 create sequence 或 create any sequence
2、 建立序列的語法
CREATE SEQUENCE sequence //建立序列名稱
[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 預設是1
[START WITH n] //開始的值,遞增預設是minvalue 遞減是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //迴圈/不迴圈
[{CACHE n | NOCACHE}];//分配並存入到記憶體中
NEXTVAL 返回序列中下一個有效的值,任何使用者都可以引用
CURRVAL 中存放序列的當前值
NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效
Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1
Cycle cache 2;
//先nextval 後 currval
Select seqEmp.nextval from dual;
Select seqEmp.currval from dual;
Cache<max-min/increment
//解釋
{
Create 建立
Sequence 序列 seqEmop 序列名稱
Increment by 步長
Stat with 1 開始值
Maxvalue 最大值
Minvalue 最小值
Cycle 迴圈 nocycle 不迴圈
Cache 快取 Cache<maxvalue-minvalue/increment by//一般不採用快取
Nextvalue 下一個
Currval 當前值
}
//例項應用
//實現id的自動遞增
//第一步
create table cdpt(
id number(6),
name varchar2(30),
constraint pk_id primary key(id)
);
Create sequence seq_cdpt
Increment by 1
Start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache
insert into cdpt values(seq_cdpt.nextval,’feffefe’);
commit;
select * from cdpt;
/使用序列
會產生裂縫
l 序列在下列情況下出現裂縫:
• 回滾
• 系統異常
>多個表同時使用同一序列
//修改序列的增量, 最大值, 最小值, 迴圈選項, 或是否裝入記憶體
alter SEQUENCE sequence //建立序列名稱
[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 預設是1
[START WITH n] //開始的值,遞增預設是minvalue 遞減是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //迴圈/不迴圈
[{CACHE n | NOCACHE}];//分配並存入到記憶體中
修改序列的注意事項:
l 必須是序列的擁有者或對序列有 ALTER 許可權
l 只有將來的序列值會被改變
l 改變序列的初始值只能通過刪除序列之後重建序列的方法實現
刪除序列
l 使用DROP SEQUENCE 語句刪除序列
l 刪除之後,序列不能再次被引用
Alter sequence seqEmp maxvalue 5;
Select seqEmp.nextval from dual;oracle序列詳解