資料庫中的sequences

2021-09-24 03:57:37 字數 2481 閱讀 5452

一、概述

sequence是序列號的意思,每次取的時候它會自動增加(自增)。sequence與表沒有從屬關係,與表一樣屬於使用者。

二、主要內容

1、create sequence語法

--首先使用者要有create sequence或者create any sequence的許可權。

create sequence seqname [ increment increment ]

[ minvalue minvalue ] [ maxvalue maxvalue ]

[ start start ] [ cache cache ] [ cycle ][order]

注釋: seqname: 序列名

increment : 遞增數 ,例如increment by 1  就是遞增1;increate by -1 就是遞減1

minvalue:  序列最小值

maxvalue : 序列最大值,最大為27個9

start:  序列從哪個值開始,先去一部分序列值存入快取,可以提高效能。缺點是發生系統故障後可能導致序列號不連續,可以設定為nocache保證不會發生序列跳動。預設值是20。

cycle:迴圈,到達最大值後,從最小值重新開始生成序列號,可以設定為nocycle表示累加不迴圈。

order: 保證按順序申請。預設是noorder。order和noorder的區別表現在並行服務和獨佔服務之間 打個比方:雙cpu對同乙個oracle db 中的 abc sequence申請序號時, 這時就有兩個請求a和b,假設a請求在前b在後, 現在abc序列中的值為9. 如果新增了order選項,那麼一定是a請求到9, b請求到10.但如果沒有新增此選項,則有可能b請求到9, a請求到10.order一般用於時間戳型別,對於主鍵則用處不大。

例子:create sequence seq

minvalue 1        --最小值

increment by 1    --遞增1

start with 1      --從1開始

nomaxvalue        --無最大值

nocycle           --不迴圈

cache 100;        --快取100個序列號

三:下面介紹一下關於sequence 的生成,修改,刪除等常用的操作:

1. 建立 sequence

使用如下命令新建sequence(使用者需要有create sequence 或者create any sequence許可權):

create sequence test_sequence increment by 1 -- 每次加的個資料 start with 1 -- 從1開始計數 nomaxvalue -- 不設定最大值 nocycle -- 一直累加,不迴圈 cache 10 ; [注意] 如果設定了cache值,oracle將在記憶體裡預先放置一些sequence,以使訪問速度更快。cache裡面的取完後,oracle自動再取一組到cache。 但是,使用cache可能會跳號, 當遇到資料庫突然異常down掉(shutdown abort),cache中的sequence就會丟失. 因此,推薦在create sequence的時候使用 nocache 選項。

2. 使用 sequence:

sequence.currval -- 返回 sequence的當前值 sequence.nextval -- 增加sequence的值,然後返回 sequence 值

[注意] 第一次nextval返回的是初始值; 隨後的nextval會自動增加你定義的increment by值,然後返回增加後的值。

currval 總是返回當前sequence的值,但是在第一次nextval初始化之後才能使用currval,否則會出錯。 一次nextval會增加一次 sequence的值,所以如果你在同乙個語句裡面使用多個nextval,其值就是不一樣的。

sequence 儲存在資料字典中,儲存於user_sequences表 last_number 為最終序列號,也就是sequence游標當前所在的位置。

//get sequence last_number

select last_number from user_sequences where sequence_name=test_seqname

// nextval 使游標指向下一位(增一或減一)

select seqname.nextval from user_sequences 得到下一位游標的值

3. 修改 sequence

使用者必須擁有alter any sequence 許可權才能修改sequence. 可以alter除start至以外的所有sequence引數. 如果想要改變start值,必須 drop sequence 再 re-create.

命令格式如下:

alter sequence test_sequence increment by 10 maxvalue 10000 cycle -- 到10000後從頭開始 nocache ;

4. 刪除 sequence drop sequence order_seq;

Oracle中SEQUENCES的使用

oracle中sequences的使用 oracle 提供了sequence物件,由系統提供自增長的序列號 通常用於生成資料庫資料記錄的自增長主鍵或序號的地方.下面介紹一下關於 sequence 的生成,修改,刪除等常用的操作 1.建立 sequence 使用如下命令新建 sequence 使用者需...

Oracle中SEQUENCES的使用

oracle中sequences的使用 oracle 提供了sequence物件,由系統提供自增長的序列號 通常用於生成資料庫資料記錄的自增長主鍵或序號的地方.下面介紹一下關於 sequence 的生成,修改,刪除等常用的操作 1.建立 sequence 使用如下命令新建 sequence 使用者需...

Oracle中SEQUENCES的使用

oracle中sequences的使用 oracle 提供了sequence物件,由系統提供自增長的序列號 通常用於生成資料庫資料記錄的自增長主鍵或序號的地方 下面介紹一下關於 sequence 的生成,修改,刪除等常用的操作 1.建立sequence 使用如下命令新建 sequence 使用者需要...