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...