Oracle實現自增列

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   使用   sp   for   

首先建立一個序列(sequence) ,實現自增

-- Create sequence create sequence t_user_seqminvalue 1 -- 最小值:1nomaxvalue -- 沒有最大值start with 1 -- 從1開始increment by 1 --每次遞增1nocache --不使用緩衝 (也可設定為 cache n, 區別見本文最後附註部分)order;


建立觸發器,在觸發器中使用之前建立好的sequence :t_user_seq

-- Create trigger create or replace trigger t_user_trigger-- 在往表t_user中插入新資料之前觸發before insert on t_userfor each rowbegin      select  t_user_seq.nextval       -- 自增欄位: user_id      into:new.user_id      from sys.dual ;end;

 最後執行幾條insert 語句測試一下。


附註:

如果指定CACHE值,Oracle就可以預先在記憶體裡面放置一些Sequence,這樣存取的快些。cache裡面的取完後,Oracle自動再取一組到cache。使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort),cache中的Sequence就會丟失。舉個例子:比如你的sequence中cache 100,那當你sequence取到90時突然斷電,那麼在你重啟資料庫後,sequence的值將從101開始。

如果指定NOCACHE值,Oracle就不會預先在記憶體裡面存放Sequence,當然這也就可以避免資料庫不正常down掉的sequence丟失。不過會產生一些問題:建立nocache   sequence在高並發訪問時,容易導致row cache lock等待事件,主要原因是每次擷取nextval時都需要修改rowcache中的字典資訊。使用nocache  sequence,還會導致如下問題:
由於每次修改字典資訊都需要commit,可能導致log file sync等待,nocache sequence在RAC環境下,會對基於sequence產生的列建立的索引造成執行個體間大量索引塊爭用
基於以上問題,避免建立nocache sequence。

再來看看sequence相關保護機制:
row cache lock:在調用sequence.nextval情況下需要修改資料字典時發生,對應row cache lock事件
SQ lock:在記憶體緩衝(並非rowcache)上擷取sequence.nextval時發生,對應enq:SQ-contention事件
SV lock:RAC環境下擷取cache+order屬性的sequence.nextval時發生,對應DFS lock handle事件

什麼情況下使用cache什麼時間上使用nocache?

我個人感覺應該盡量使用cache,因為現在的資料庫很多都是在高並發的情況下啟動並執行,首先這樣可以搞效能,並且也不會產生row cache lock等待事件。可能有些人會擔心資料庫不正常的down掉會產生序號間斷,但這也是很少的情況。當然如果你的業務要求是絕不能產生間斷的序號,那就要使用nochache了。


參考:http://blog.csdn.net/duanning397/article/details/7670302

Oracle實現自增列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.