序列的主要作用:
在很多資料庫裡都存在自動增長列的資料型別,幾乎所有的關係型資料庫都支援自動增長列的操作,但是只有oracle特殊,只有oracle 12c版本之後才提供自動增長列,在此之前都是用序列的方式來處理。
序列的建立語法:
create sequence 序列名
[increment_by 步長][start with 開始值]
[maxvalue 最大值|nomaxvalue]
[minvalue 最小值|nominvalue]
[cycle|nocycle]
[cache 快取資料 |nocache]
大部分情況下,我們都只會建立預設序列,預設序列指最小值為1,沒有最大值,開始值為0,並且設有20個快取資料。
通常情況下我們只需要執行就可以:create sequence 序列名
建立完序列後,其內容一定會儲存在資料字典中,「user_sequences」序列的使用:查詢資料字典之後會發現其中字段:
sequence_name 序列名
minvalue 最小值
maxvalue最大值
increment_by 步長(每次增長多少)
cy 是否迴圈
cache_size 快取資料
last_number 最後一次內容值為多少
對於序列可以採用兩個偽列來使用:
序列物件.nextval:表示進行序列的增長,每呼叫一次,序列加上指定的步長
序列物件.currval:表示取得當前序列內容,不管如何呼叫,序列內容不發生改變
序列成功建立之後,嚴格來講序列還無法直接執行currval,必須先執行nextval 。而對於快取資料:
我們說如果如果系統提供了快取概念,基本上是用來提公升程式效能的。
通俗來說,快取就是,比方說乙個人賣包子,有人來買,如果沒有快取的話,那這個人就要先去買材料,回來處理餡,做夠買家需要的包子。然後又有人來買,他還需要再去市場買材料,然後做包子,,這樣的話效率太低。如果有快取的話,就相當於這個人一次性做了足夠多的包子,有人來買的時候直接給他。這樣效率就很快了。
但是這樣方便的同時,也有一些小問題,就是,做夠了包子沒有人過買,導致資源浪費,容易會發生跳號的問題。
如果序列想要為表中某個字段完成自動增長列的功能,只能通過insert完成,不能寫在資料庫的建立指令碼裡
使用方法舉例:
--刪除表
drop table ces purge;
--建立表
create table ces (
id number,
name varchar2(20),
constraint pk_id primary key (id)
);--在插入語句中引用序列
insert into ces(id,name) values(myxul.nextval,'張三');
由於此時在乙個session下進行,序列號是正常的,如果在多個session下,可能會出現序列號變化的情況,不用去管;
注:在設定迴圈序列的時候要注意快取資料;
修改序列:
create sequence 序列名
increment by 2(修改序列步長為2)
start with 10(修改序列開始值為10)
刪除序列:
drop sequence 序列名;
ORACLE序列操作
建立序列 create sequence tempinfo seq increment by 1 每次加幾個 start with 1 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 cache 10 設定快取cache個序列,如果系統down掉了或者其它情況將會...
oracle對序列的操作
select t.t.rowid from tbl type t order by t.id desc select seq tbl type id.nextval from dual alter sequence seq tbl type id increment by 200 alter seq...
Oracle中序列的操作以及使用前對序列的初始化
一 建立序列 create sequence myseq start with 1 increment by 1 nomaxvalue minvalue 1 二 初始化序列 select myseq.nextval from dual 這裡值得注意的是,如果先直接寫select myseq.curr...