標籤:
Oracle建立自增長要先寫序列還要去寫觸發器,不像MSSQLSERVER那樣方便。但也是麻煩,記錄如下:
Oracle中,可以為每張表的主鍵建立一個單獨的序列,然後從這個序列中擷取自動增加的標識符,把它賦值給主鍵。例如一下語句建立了一個名為customer_id_seq的序列,這個序列的起始值為1,增量為2。
create sequence customer_id_seq increment by 2 start with 1
一旦定義了customer_id_seq序列,就可以訪問序列的curval和nextval屬性。
- curval:返回序列的當前值
- nextval:先增加序列的值,然後返回序列值
以下sql語句先建立了customers表,然後插入兩條記錄,在插入時設定了id和name欄位的值,其中id欄位的值來自於customer_id_seq序列。最後查詢customers表中的id欄位。
create table customers(id int primary key not null, name varchar(15));insert into customers values(customer_id_seq.nextval, ‘name1‘);insert into customers values(customer_id_seq.nextval, ‘name2‘);select id from customers;
如果在oracle中執行以上語句,查詢結果為:
通過觸發器自動添加id欄位
從上述插入語句可以發現,如果每次都要插入customer_id_seq.nextval的值會非常累贅與麻煩,因此可以考慮使用觸發器來完成這一步工作。
建立觸發器trg_customers
create or replacetrigger trg_customers before insert on customers for each row begin select CUSTOMER_ID_SEQ.nextval into :new.id from dual; end;
插入一條記錄
insert into customers(name) values(‘test‘);
這是我們會發現這一條記錄被插入到資料庫中,並且id還是自增長的。
建立的序列可以在這裡查看到:
原文地址:http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2542277.html
Oracle- 表的自增長建立