Oracle創建自動增長列


前言:

  Oracle中不像SQL Server在創建表的時候使用identity(1001,1)來創建自動增長列,而是需要結合序列(Sequences)和觸發器(Triggers)來實現

創建測試表

create table tbluser
(
     ID          NUMBER(10) not null,
     NAME        VARCHAR2(50) not null, 
     SEX         VARCHAR2(2) not null, 
     AGE         NUMBER NOT NULL,
     DESCRIPTION VARCHAR2(1000), 
     PRIMARY KEY("ID") 
)        

創建一個序列,從10000開始計數,增量為1

create sequence USER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --從10000開始生成序列
increment by 1 --增量為1
cache 20; --預存20個序列值在內存中,這樣可以提高訪問序列的速度

為user表創建一個before insert的觸發器,在插入之前將表user的主鍵設置為上面的序列值

CREATE OR REPLACE TRIGGER "USER_ID_TRIGGER" BEFORE
INSERT ON tbluser FOR EACH ROW --一定要加上For each row,表示該觸發器適應於每一條記錄
declare   
      mid number;   
begin   
      select user_id.nextval into mid from dual; --user_id.nextval是獲得上面定義的序列ORDER_ID的下一個值
      :new.id:=mid; --將得到的序列值賦給表user的主鍵id, 可以用":new"引用將要插入的一行數據
      
--
SELECT USER_ID.Nextval INTO :new.ID FROM dual; end;

這樣,當執行插入記錄的時候,可以這樣寫

insert into tbluser(name,sex,age,description)values('test','',20,'');

Oracle會調用上面創建的觸發器將序列值賦值給主鍵ID

第二種方案:

在建完序列后直接在插數據的時候在主鍵的地方直接使用user_id.nextval代替


免責聲明!

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



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