ORACLE資料庫實現自增的方式

2021-10-12 01:41:36 字數 2229 閱讀 1092

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

準備工作建表:

//準備工作建立一張表

create

table dept_p(

dept_id varchar2(40)

notnull

, 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

1increment by

1cache 50

第二部:建立觸發器

create

orreplace

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

1start

with

1nomaxvalue

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資料庫自增

1 建立sequence create sequence seq seq1 minvalue 1 maxvalue 99999999999999 start with 1 increase by 1 chache 20 如果指定cache值,oracle就可以預先在記憶體裡面放置一些sequence...

Oracle資料庫主鍵自增

在學習mysql時,我們很容易通過auto increment就能實現主鍵自增的功能,但是在oracle資料庫中,是沒有這個關鍵字的,所以也不能通過這樣來實現主鍵自增。下面我就為大家介紹兩種實現主鍵自增的方法。兩種方法的基礎都有乙個概念就是序列 sequence 的概念,一種是利用序列和顯式呼叫的方...

實現sybase資料庫欄位自增

例如 在sybase中有一張使用者表t ug user,其中包含 id name password 等等吧,我想在專案中實現插入資料到t ug user表中時,可以不考慮id 欄位,讓它自己自增1,方法如下 create table t ug user id numeric 6,0 identity...