Oracle序列配合觸發器實現插入資料時自增

2021-10-02 10:23:03 字數 2212 閱讀 6097

oracle不能像mysql/sqlserver那樣設定主鍵自增

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

現有表:

create

table tbl_message(

id number primary

key,

note varchar2(

200)

notnull,)

;

建立序列:

create sequence mess_seq

minvalue 1

maxvalue 99999999999

start

with

1increment by

1nocache;

increment by – 每次加幾個

start with – 從1開始計數

nomaxvalue – 不設定最大值

nocycle – 一直累加,不迴圈

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

currval=返回 sequence的當前值

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

當然這些屬性都可以預設

create sequence mess_seq;
沒有使用觸發器的下使用序列如下:

insert

into tbl_message(id,note)

values

(mess_seq.nextval,

'第一條測試資料');

insert

into tbl_message(id,note)

values

(mess_seq.nextval,

'第二條測試資料');

insert

into tbl_message(id,note)

values

(mess_seq.nextval,

'第三條測試資料'

);

結果如下:

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

但是,當在表中手動新增記錄時,還是需要新增id

作為乙個程式設計師這種重複的**不想寫那麼多。

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

現在使用觸發器實現插入資料過程中id自增:

**:

create

orreplace

trigger tri_mes_id

before insert

on tbl_message --作用表

for each row

--每行受影響

declare

nextid number;

begin

if :new.id is

null

or :new.id=

0then

select mess_seq.nextval into nextid from dual;

:new.id:=nextid;

endif

;end tri_mes_id;

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

id引用sequence實現了自增

測試:

insert

into tbl_message(note)

values

('第四條測試資料');

insert

into tbl_message(note)

values

('第五條測試資料');

insert

into tbl_message(note)

values

('第六條測試資料'

);

結果如下:

謝謝瀏覽。

Oracle 序列,觸發器

序列是什麼 序列就是按照一定的規則,不斷增長 不斷減少 的乙個數字 用於我們資料庫表裡 作為資料的乙個唯一標識。序列的語法 建立序列 create sequence seq objid 建立乙個名稱為seq objid 的序列 increment by 1 每次增長1 1,2,3,4,5,6,7,s...

oracle序列觸發器簡單實現示例

建立oracle主鍵自增長 1.建表 create table test id number 10 primary key,name varchar2 20 2.建立序列 create sequence test sequence minvalue 1 自增最小值 maxvalue 9999999 ...

oracle 建序列,觸發器

oracle是全球最大的關聯式資料庫,她的使用有很多技巧,常用的建立表空間,建立序列,建立觸發器等嗾使是初學者需要掌握的內容。首先登陸資料庫 啟動命令列 cmdsqlplus 以管理員 sys 登陸資料庫 sqlplus sys password as sysdba 建立臨時表空間 create t...