Oracle實現自增的兩種方式

2021-10-01 02:53:36 字數 1819 閱讀 3102

mysql資料庫因為其有自動+1,故一般我們不需要花費太多時間,直接用關鍵字auto_increment即可,但是oracle不行,它沒有自動增長機制。顧我們需要自己去實現。一般有兩種方式,但是這兩種方式都與序列化有關。第一種方式:序列化+觸發器;第二種方式:序列化+顯示呼叫序列化。一般我選用第一種方式。因為我們只要建立好序列化+觸發器,這樣我們就需要太多的去關注這個欄位了,觸發器會在我們插入資料時自動觸發,幫助我們進行+1操作。這正好解決了我最近做的乙個mini專案中的部門刪除操作(子部門與父部門),因為我們知道父部門總是先於子部門存在於資料庫中,如果我們額外建乙個欄位去記錄插入資料的先後順序,這樣我們在做刪除時,只要讓子部門先於父部門刪除,這樣就不會存在因為批量刪除部門,因刪除父部門遞迴刪除子部門,再刪子部門時發現沒有子部門的存在了而報異常。好了案例說完了。現在來在oracle資料庫中具體實現自增1的操作。

準備工作建表:

//準備工作建立一張表

create table dept_p(

dept_id varchar2(40) not null,

dept_name varchar2(40),

parent_id varchar2(40),

state number(11),

dept_sort number(11)

);alter table dept_p add [constraint dept_id] primary key(dept_id);

方式一:序列化+觸發器

第一步:建立序列sequence

create sequence seq_t_dept

minvalue 1

maxvalue 99999999

start with 1

increment by 1

cache 50

第二步:建立觸發器

create or replace trigger 「dept_trig」

before insert on dept_p

referencing old as old new as new for each row

declare

begin

select seq_t_dept.nextval into :new.dept_sort from dual;

end dept_trig;

第三步:插入資料測試看dept_sort是否自增

insert into dept_p values(『001』, 『安保部』, 『000』, 1);

select * from dept_p;

方式二:序列化+顯示呼叫

第一步:建立序列sequence

//建立sequence

create sequence seq_on_dept

increment by 1

start with 1

nomaxvalue

nocycle

nocache;

第二步:顯示呼叫序列

insert into dept_p values(『001』, 『安保部』, 『000』, 1, seq_on_test.nextval);

第三步:查詢進行檢視

select * from dept_p

注://檢視序列當前值和下乙個值的檢視方式

select seq_on_dept.currval from dual;

select seq_on_dept.nextval from dual;

總結:create sequence 序列名

[increment by n]

[start with n]

;————————————————

oracle 建立欄位自增長 兩種實現方式彙總

mysql等其他資料庫中有隨著記錄的插入而表id自動增長的功能,而oracle卻沒有這樣的功能,我們有以下兩種方式可以解決欄位自增長的功能。因為兩種方式都需要通過建立序列來實現,這裡先給出序列的建立方式。create sequence 序列名 increment by n start with n ...

oracle實現自增

oracle實現自增id 建立一張t studentinfo表 create table t studentinfo id integer notnull primary key,xsname nvarchar2 120 not null,xsage integer notnull,mobile v...

oracle分頁的兩種方式

方式一 select from select rownum r e.empno from select from emp order by sal desc e where r 5 and r 8 注 在oracle中rownum永遠是從1開始的,所以where條件不能 使用 比如 蓋8層樓,123...