Oracle實現自增方式 序列 觸發器

2021-09-08 19:39:55 字數 1961 閱讀 3171

oracle不能像mysql那樣設定主鍵自增,oracle用 《序列+觸發器》的方式使資料表的一列或多列實現自增

序列sequence+觸發器trigger:實現資料表s_depart中的主鍵的自增

pl/sql圖示:

1、建立資料表,如下,departid是主鍵

2、建立序列sequences

在oracle中sequence就是序列,每次取的時候它會自動增加。

sequence與表沒有關係,也就是,其他表都可以引用這個sequence

increment by  -- 每次加幾個 

start with  -- 從1開始計數 

nomaxvalue -- 不設定最大值 

nocycle -- 一直累加,不迴圈 

cache 20; --設定快取cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設定為---------nocache

currval=返回 sequence的當前值  

nextval=增加sequence的值,然後返回 sequence 值(下乙個sequence值)

或sql語句

create sequence s_s_depart

minvalue

1maxvalue

99start with

1increment by

1nocache;

然後執行如下sql語句,在s_depart插入一條記錄,執行3次,看到departid實現了自增

已經引用序列sequence實現了自增,

但是,當在表中手動新增記錄時,還是需要新增departid,因為建表時設定它是主鍵,not null

那麼,怎麼只輸入departname、 departorder,然後儲存、commit,實現departid引用sequence自增呢?

這時需要用到觸發器

3、建立觸發器的sql語句如下:

create or replace trigger tri_test_id

before insert on s_depart --s_depart 是表名

foreach row

declare

nextid number;

begin

if :

new.departid is null or :new.departid=0 then --departid是列名

select s_s_depart.nextval --s_s_depart正是剛才建立的

into nextid

from

sys.dual;

:new.departid:=nextid;

end if;

end tri_test_id;

此時,只輸入departname、 departorder,然後儲存、commit,

departid引用sequence實現了自增

不同資料庫的主鍵自增方式

1 mysql的自增變數是比較好記的,使用auto increment關鍵字,如果知道英文的就容易記憶了,如下建立乙個帶有自增變理的表 create table test id int auto increment primary key not null,name varchar 50 注釋 此處...

Oracle通過觸發器和序列的方式實現自增

觸發器格式 create or replace trigger 觸發器名字 before insert on 資料表名字 for each row declare nextid number begin if new.自增的列名 is null or new.自增的列名 0 then select ...

ORACLE 自增序列

1 在plsql下先建立乙個專用的使用者 create the user create user user1 identified by user1 default tablespace users temporary tablespace temp profile default grant re...