前言:
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代替
