通過序列和觸發器實現Oracle主鍵自增長

前言

大佬設計了一個表,需要用自增值做主鍵,可是這種事情oracle還要自己去搞,也是有些麻煩。雖然是個很簡單的事情,但是畢竟沒用過也不會,而且估計一年半載也用不上一次的技巧,就簡單整理一下。

假設我們有個這樣的表

CREATE TABLE INCREASE_TEST
(
  ID   NUMBER NOT NULL PRIMARY KEY,
  NAME VARCHAR2(10),
  AGE  NUMBER
)

創建序列

首先要給需要自增的表建一個專屬的序列,畢竟大家都用一個序列豈不是要亂掉。

create sequence seq_increase
increment by 1
start with 1;

其中,seq_increase是序列的名稱,只要讓自己能記住是哪個表的就可以了。下面的值是序列的屬性,其中increment by 1是每次加1,當然每次加幾都可以。start with 1是從1開始,當然從幾開始都行。
也可以設置其他的屬性,如:

  • 最小值爲1:minvalue 1
  • 不設置最大值:nomaxvalue
  • 一直累加,不循環:nocycle
  • 不建緩衝區:nocache

創建觸發器

自增需要通過觸發器來實現,就是說在插入的時候將序列的下一個值插入主鍵。

CREATE OR REPLACE TRIGGER tg_increase
BEFORE INSERT ON INCREASE_TEST 
FOR EACH ROW WHEN (new.id is null)
begin
select seq_increase.nextval into:new.id from dual;
end;

其中tg_increase是觸發器的名字,new.id的id是INCREASE_TEST表的主鍵字段名id。可以看出這個觸發器的大概意思是,在對INCREASE_TEST表進行插入操作之前,查看插入的數據。如果插入的數據id這個字段爲空,則用seq_increase序列的下一個值填入id這個字段。
我們也可以查看當前用戶創建的序列,以及刪除序列。

-- 查看序列
select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences WHERE sequence_owner = '當前用戶'
-- 刪除序列
DROP SEQUENCE seq_increase

相關閱讀

ORACLE序列總結
Oracle觸發器用法實例詳解

參考文章:

Oracle主鍵自增長及自動生成策略
Oracle實現主鍵自增長的幾種方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章