Oracle實現主鍵自增長的幾種方式

2021-08-07 05:30:53 字數 2608 閱讀 2406

使用sqlserver、mysql時,無論我們使用的是直接jdbc連線資料庫,還是通過hibernate操縱資料庫,我們只需要設定乙個選項或者一行註解便可以實現主鍵的自增長。

但oracle沒有直接提供主鍵自增長的功能,這裡我們可以使用兩種方式來解決主鍵自增長的問題。

第一種,通過序列以及觸發器實現主鍵自增長。

這種方式適用於直接使用jdbc連線資料庫。這種方式將主鍵自增長的任務完全交給資料庫,我們無需在**層面上進行任何控制。

第二種,通過序列以及hibernate配置實現自增長。

這種方式適用於通過hibernate連線資料庫的方式。這種方式在資料庫上建立序列,通過配置在pojo類上的注釋,讓hibernate去呼叫資料庫的序列實現自增長。

這兩種方式都是通過oracle的序列實現自增長,但第一種通過資料庫的觸發器在插入的時候自動插入主鍵。而後者則由hibernate自動完成獲取主鍵,插入主鍵這一操作。

進一步,hibernate的級聯增加也會因為無法獲取到主鍵而無法插入資料到關係表中。

一、通過序列以及觸發器實現主鍵自增長

首先,為每個表建立乙個序列:

1

/*建立序列 */2

--為bitinfo表的主鍵建立序列

3create

sequence bitinfo_id_seq

4 increment by

15 start with1;

6--為product表的主鍵建立序列

7create

sequence product_id_seq

8 increment by

19 start with

1;

接著,為相對於的表建立觸發器:

1

/*建立觸發器(兩個觸發器請分開執行) */2

--為bitinfo表建立觸發器

3create

orreplace

trigger

trg_bitinfo

4 before insert

ont_yw_bitinfo

5for

each row

6begin

7select bitinfo_id_seq.nextval into :new.id from

dual;

8end

trg_bitinfo;9--

為product表建立觸發器

10create

orreplace

trigger

trg_product

11 before insert

ont_yw_product

12for

each row

13begin

14select product_id_seq.nextval into :new.id from

dual;

15end trg_product;

你可以使用下面的語句檢視序列是否已經建立:

1

--檢視某位使用者的所有序列

2select sequence_owner,sequence_name from dba_sequences where sequence_owner=

'csy';

3--刪除序列

4drop sequence bitinfo_id_seq;

二、通過序列以及hibernate配置實現自增長

首先,為每個表建立乙個序列:

1

/*建立序列 */2

--為bitinfo表的主鍵建立序列

3create

sequence bitinfo_id_seq

4 increment by

15 start with1;

6--為product表的主鍵建立序列

7create

sequence product_id_seq

8 increment by

19 start with

1;

接著,把pojo類主鍵上的注釋改為:

1

@id2 @sequencegenerator(name = "prodg",sequencename="product_id_seq",allocationsize=1)

3 @generatedvalue(strategy = generationtype.sequence, generator = "prodg")

4public

intgetid()

其中第2、3行宣告該主鍵使用序列來實現自增長,第2行的sequencename指定了序列名(即在上一步驟所建立的序列名)。

第2行的allocationsize指定了自增長的大小,這裡手動設定為1。在hibernate annotation版本(大概是3.2版本)之前,如果不設定這個屬性,其預設為1。

但在3.2版本之後如果不設定allocationsize,則其自增長大小變成50。

oracle 自增長主鍵

1 首先,你要有一張表!create table example id number 4 not null primary key,name varchar 25 phone varchar 10 address varchar 50 2 然後,你需要乙個自定義的sequence create se...

oracle主鍵自增長

oracle主鍵自增長 1 比較土鱉的方式 定義主鍵number型別,之後每次存資料時候,id為取得此表的max id 之後 1,在存放進去 可以用時間作為主鍵,唯一。2 官方版 使用序列方式,增長主鍵。下面介紹使用過程。建立測試表 t sql sql create table t 2 id num...

oracle主鍵自增長

oracle主鍵自增長 1 比較土鱉的方式 定義主鍵number型別,之後每次存資料時候,id為取得此表的max id 之後 1,在存放進去 可以用時間作為主鍵,唯一。2 官方版 使用序列方式,增長主鍵。下面介紹使用過程。建立測試表 t sql sql create table t 2 id num...