oracle 建立欄位自增長 兩種實現方式彙總

2021-09-08 11:12:24 字數 2910 閱讀 3643

mysql等其他資料庫中有隨著記錄的插入而表id自動增長的功能,而oracle卻沒有這樣的功能,我們有以下兩種方式可以解決欄位自增長的功能。

因為兩種方式都需要通過建立序列來實現,這裡先給出序列的建立方式

create

sequence 序列名

[increment by n][

start with n][

][];

解析

1)increment by用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表oracle序列的值是按照此步長遞減的。

2)start with 定義序列的初始值(即產生的第乙個值),預設為1。

3)maxvalue 定義序列生成器能產生的最大值。選項nomaxvalue是預設選項,代表沒有最大值定義,這時對於遞增oracle序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。

4)minvalue定義序列生成器能產生的最小值。選項nomaxvalue是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。

5)cycle和nocycle 表示當序列生成器的值達到限制值後是否迴圈。cycle代表迴圈,nocycle代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。

6)cache(緩衝)定義存放序列的記憶體塊的大小,預設為20。nocache表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。

解決方式

一、序列+觸發器

具體實現方式如下:

第一步,建立sequence

--

create sequence

create

sequence seq_t_recv

minvalue

1maxvalue

9999999

start

with

1increment by1

cache

50;

第二步,建立表

--

create table

create

table

recv_msg

( id

number

, messageid

varchar2(32

), contents

varchar2(2000

),varchar2(100

), phonenumber

varchar2(2000

), updatetime date

default

sysdate

);

第三步,建立觸發器

create

orreplace

trigger

"recv_trig"

before

insert

onrecv_msg

referencing old

as old new as new for

each row

declare

begin

select seq_t_recv.nextval into :new.id from

dual;

end recv_trig;

第四步,測試並確認

向表中插入一條資料,檢視id欄位是否自動增長了。

解決方式

二、序列+顯示呼叫序列

一、建立sequence 

create

sequence seq_on_test

increment by1

start

with

1nomaxvalue

nocycle

nocache;

二、建表

--

建表 drop

table

test;

create

table

test(

id integer

,stu_name nvarchar2(4)

,stu_age

number

);

三、插入資料(顯示呼叫序列的下乙個值插入)

--

插入資料

insert

into test values(seq_on_test.nextval,'

mary

',15

); insert

into test values(seq_on_test.nextval,'

tom',16);

四、檢視

select

*from

test;

--結果

/*1 mary 15

2 tom 16

*/

--

seq的兩個方法

select seq_on_test.currval from

dual;

select seq_on_test.nextval from

dual;

--結果

/*2

3 */

總結

通過觸發器直接新增的方式比顯示呼叫方便一下,我們不需要哪個欄位要通過哪個序列還獲取下乙個值,而通過觸發器進行執行的新增。

Oracle欄位自增長筆記

先建立一張表 管理員許可權類別 管理員許可權類別 create table ncga admin category id number 7 not null primary key,name nvarchar2 20 not null,is can del number 1 null,is can ...

在oracle表中怎樣建立自增長字段

建立測試資料表 create table test id number primary key,name varchar2 20 2.建立序列 create sequence seq test 3.建立觸發器 create or replace trigger autoincrement befor...

oracle建立自增長主鍵

建表 使用者必須被顯示的賦予建立觸發器的許可權才可以建立trigger 1 用sys 1234登陸sqlplus 2 在command視窗輸入 grant create any trigger to sprita1 3 提示grant succeeded表明賦予成功 建立自增長主鍵的表 create...