前言
大佬設計了一個表,需要用自增值做主鍵,可是這種事情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