Oracle實現自增主鍵


Oracle沒有這個”auto_increment”屬性,所以它沒法像MySQL般在表內定義自增主鍵。但是,Oracle里的序列(SEQUENCE),可間接實現自增主鍵的作用。

序列(Sequence),又叫序列生成器,用於提供一系列的數字,開發人員使用序列生成唯一鍵。每次訪問序列,序列按照一定的規律增加或者減少。
序列的定義存儲在SYSTEM表空間中,序列不像表,它不會占用磁盤空間。
序列獨立於事務,每次事務的提交和回滾都不會影響序列。

創建的方法及參數說明如下:

CREATE SEQUENCE T_USER_SEQ
MINVALUE 1 
NOMAXVALUE 
INCREMENT  BY 1 
START  WITH 1 
NOCACHE;
  1. T_USER_SEQ:序列名
  2. MINVALUE :最小值;設置 NOMINVALUE 表示無最小值  
  3. NOMAXVALUE: 表示無最大值  
  4. INCREMENT BY 1 :每次自增1, 也可寫非0的任何整數,表示自增,或自減
  5. START WITH 1:以該值開始自增或自減  
  6. NOCACHE :不緩存序列;也可以指定可以緩存 20 個值在內存里,則寫CACHE 20 

 USER表的創建語句如下:

CREATE TABLE USER
(  
    ID  INT PRIMARY KEY ,  
   NAME VARCHAR2(40)  NULL ,  
    AGE VARCHAR2(40)  NULL
);    

插入時:

insert into user (ID, NAME ,AGE) values (T_USER_SEQ.NEXTVAL, "張三" , "18" ) 

但是這樣還是會有一些麻煩,T_USER_SEQ.NEXTVAL 這一步可以省掉嗎?像mysql主鍵一樣插入新紀錄時用不着考慮自增,可以使用觸發器

創建觸發器的方法及參數說明如下:

create or replace trigger T_USER_SEQ_TRIGGER  /*觸發器名稱*/
before  insert on USER /*觸發條件:當向表user執行插入操作時觸發此觸發器*/
for each row  /*對每一行都檢測是否觸發*/
begin /*觸發器開始*/
select T_USER_SEQ.nextval  into :new.ID  from dual; /*觸發器主體內容,即觸發后執行的動作,在此是取得序列T_USER_SEQ的下一個值插入到表user中的id字段中*/
end T_USER_SEQ_TRIGGER; /*觸發器結束*/

插入數據:

insert into user (ID, NAME ,AGE) values ( null , "張三" , "18" );  /*方式一*/
insert into user ( NAME ,AGE) values ( "張三" , "18" );  /*方式二*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM