oracle不像sql
server 有關鍵字identity直接可插入數據時自增 ,Oracle是不能用Identity,可以使用Sequence
Create Table Tempinfo( ids int not null, names nvarchar2(50), sex varchar(10) ) insert into Tempinfo (ids,names,sex) values (1,'Serein',2188); insert into Tempinfo (ids,names,sex) values (2,'James',2182); select * from Tempinfo --drop table Tempinfo
實現oracle 自增列第一步,創建一個sequence。
CREATE SEQUENCE Tempinfo_seq INCREMENT BY 1 -- 每次加幾個 START WITH 1 -- 從1開始計數 NOMAXvalue -- 不設置最大值 NOCYCLE -- 一直累加,不循環 CACHE 10; --設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置為---------NOCACHE
一旦定義了Tempinfo_seq,你就可以用currval,nextval
currval=返回 sequence的當前值
nextval=增加sequence的值,然后返回 sequence 值
比如:
Tempinfo_seq.CURRVAL
Tempinfo_seq.NEXTVAL
第二步,創建一個觸發器。
create or replace trigger userlogin_trigger before insert on Tempinfo for each row begin select Tempinfo_seq.Nextval into:new.ids from sys.dual ; end;
執行插入查看
insert into Tempinfo (names,sex) values ('Terry',2189);
當然也事不用創建觸發器,直接在插入數據時使用sequence就可以了
insert into Tempinfo (ids,names,sex) values (Tempinfo_seq.Nextval,'Serein',2188);
可以使用sequence的地方:
- 不包含子查詢、snapshot、view的 select 語句
- INSERT語句的子查詢中
- NSERT語句的values中
- UPDATE 的 set中
刪除序列
簡單的Drop Sequence
Sql代碼
drop sequence Tempinfo_seq;
參考: oracle 實現插入自增列