表裏指定字段自增,這個問題在SQLSERVER裏面來說很簡單 ,Identity(1,1)該字段就會從1開始,按照+1的方式自增.
但是在Oracle裏面呢,就需要用到序列和觸發器完成纔可以。
相信這個問題每一個轉Oracle型數據庫時都會遇到。 所以我在此寫一篇博客,不求聞達於諸侯,只希望大家也和我一樣願意把自己遇到的問題寫到博客上,來幫助每一位IT行業的同伴。
首先數據表名: t_sys_organize
查詢數據 select * from t_sys_organize;
表中主鍵列是F_ID ,接下來就指定該列F_ID自增長, 以100000起開始,後面添加數據依次+1,100001,100002,100003.........等等
-----oracle 指定字段 自增 ,1.要先創建一個序列 2. 之後創建一個觸發器
--- 序列 (序列與觸發器實現t_sys_organize表中F_ID字段的自動增長)
create sequence t_sys_organize_F_ID_SEQUENCE
minvalue 100000
maxvalue 99999999
start with 100000
increment by 1
nocache;
--觸發器 (序列與觸發器實現t_sys_organize表中F_ID字段的自動增長)
CREATE OR REPLACE TRIGGER t_sys_organize_F_ID_TRIGGER BEFORE INSERT ON t_sys_organize FOR EACH ROW WHEN(NEW.F_ID IS NULL)
BEGIN
SELECT t_sys_organize_F_ID_SEQUENCE.NEXTVAL INTO:NEW.F_ID FROM dual;
END;
之後添加數據,則如圖顯示:
就會看到該數據依次遞增。
其中序列的語法:
創建序列
語法 CREATE SEQUENCE 序列名 [相關參數]
參數說明
INCREMENT BY :序列變化的步進,負值表示遞減。(默認1)
START WITH:序列的初始值 。(默認1)
MAXvalue:序列可生成的最大值。(默認不限制最大值,NOMAXVALUE)
MINVALUE:序列可生成的最小值。(默認不限制最小值,NOMINVALUE)
CYCLE:用於定義當序列產生的值達到限制值後是否循環(NOCYCLE:不循環,CYCLE:循環)。
CACHE:表示緩存序列的個數,數據庫異常終止可能會導致序列中斷不連續的情況,默認值爲20,如果不使用緩存可設置NOCACHE
例
CREATE SEQUENCE SEQ_DEMO
INCREMENT BY 1
START WITH 1
NOMAXvalue
NOCYCLE
NOCACHE;
修改、刪除序列
使用 alter 命令進行修改
使用 drop 命令刪除
序列的使用
currval 表示序列的當前值,新序列必須使用一次nextval 才能獲取到值,否則會報錯
nextval 表示序列的下一個值。新序列首次使用時獲取的是該序列的初始值,從第二次使用時開始按照設置的步進遞增
查詢序列的值:select seq_name.[currval,nextval] from dual;
SQL語句中使用:insert into table (id) values (seq_name.nextval)
---------------------
作者:Developer_Dongyang
來源:CSDN
原文:https://blog.csdn.net/hu_dongyang/article/details/79039737