oracle資料庫中讓主鍵自增

2021-05-27 16:38:17 字數 1258 閱讀 7772

由於oracle設定主鍵是不會自動增加的,所以必須用 序列  來完成主鍵的遞增

1建立資料表

create table test_increase(

userid number(10) primary key,  /*建立主鍵*/

username varchar2(20)

); 2建立自動增長序列

create sequence testincrease_sequence

increment by 1   -- 每次加幾個 

start with 1     -- 從1開始計數 

nomaxvalue       -- 不設定最大值 

nocycle          -- 一直累加,不迴圈 

cache 10;  

3.在程式中的相應表的對映檔案中設定如下

testincrease_sequence

注:以上是用程式運算元據庫的方法是主鍵自增。但這種情況下在資料庫中直接插入資料時,主鍵無法自增,必須填入。

要想在資料庫中無需插入主鍵,使其自動生成可以用如下方法:

以上1、2步驟不變

3.create trigger person_trigger before --觸發器名

insert on t_tr_exam_person for each row when(new.personid is null) --被作用的表;要自增的主鍵

begin

select testincrease_sequence.nextval into:new.personid from dual;--序列名

end;

這種情況下如果在程式中插入資料,逐漸就會一次增長2,原因是:

generator 為 sequence時候

它最後會呼叫這個方法

public

string getsequencenextvalstring(string sequencename);   

triger再這麼走一遍 sequence必然是加入2次

有乙個最簡單的解決辦法:

hibernate2.0.3源**的net.sf.hibernate.dialect.oracle9dialect第78行:

public

string getsequencenextvalstring(string sequencename);   

也就是說hibernate去取序列值的時候,不讓序列加1,只取當前值然後加1返回,插入的時候讓trigger來給序列加1

Oracle資料庫主鍵自增

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

oracle資料庫主鍵自增並且返回主鍵值

一 建立序列 1.1 直接在plsql中設定 1.2 命令建立 create sequence seq users 建立序列seq users increment by 1 步長,每次加1 start with 1 從1開始 minvalue 1 最小值 maxvalue 9999999 最大值 c...

資料庫主鍵自增策略

資料庫主鍵自增策略 1.自增長主鍵策略 優點 簡單,不需要程式做特別處理 缺點 這種方法對以後如果專案移植到其他資料庫改動會比較大,而且如果多表合併,就會出現重複的主鍵 2.使用時間戳 隨機數 優點 時間簡單,與資料庫無關,移植性較好 缺點 長度太長,最少也得20位,不進占空間並且建索引的話效能會比...