mysql等其他資料庫中有隨著記錄的插入而表id自動增長的功能,而oracle卻沒有這樣的功能,我們有以下兩種方式可以解決欄位自增長的功能。
因為兩種方式都需要通過建立序列來實現,這裡先給出序列的建立方式。
createsequence 序列名
[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
);
第三步,建立觸發器
createorreplace
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
createsequence 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...