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