Oracle資料庫主鍵自增的兩種方式(SEQUENCE和觸發器)
1.準備工作
建立Oracle資料庫表,使用者表 SYS_USERS 其中user_id為主鍵
-- Create tablecreate table SYS_USERS( user_id NUMBER(9) not null, user_name VARCHAR2(20) not null, user_pwd VARCHAR2(20) not null, full_name VARCHAR2(20), sex VARCHAR2(1))
2.使用Sequence方式自增
設定ID的增長策略是sequence,同時指定sequence的名字,最好每個表建一個sequence,此種做法就如同MS-SQL,MY-SQL中的自動成長一樣,不需要建立觸發器:
1.建立SEQ
執行以下SQL 建立表
---自增序列CREATE SEQUENCE T_SYS_USER_SEQMINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE ;
T_SYS_USER_SEQ 為序列的名,序列從1開始。
2.插入的SQL
insert into sys_users(user_id,user_name,user_pwd,sex) values(T_SYS_USER_SEQ.NEXTVAL,'shaoduo','shao111','男') ; commit ;
插入語句需要在id欄位的位置使用 序列名.NEXTVAL的方式
這裡需要使用 T_SYS_USER_SEQ.NEXTVAL 。
這樣就可以使用SEQ實現自增了。
實際開發中,可能sql語句中不會指定id去產生欄位
例如
insert into sys_users(user_name,user_pwd,sex) values(‘shaoduo’,’shao111’,’男’)
這種語句是mybatis 逆向工程中mapper.xml已經產生好了。除非自己寫的mapper可以用,逆向工程的最好不要修改。所以要想使用不帶指定id自增的語句,就選擇觸發器來實現自增。
3.使用觸發器方式自增
觸發器方式也需要建立SEQUENCE ,然後在將SEQUENCE 設定觸發。
1.建立SEQ
執行以下SQL 建立表
---自增序列CREATE SEQUENCE T_SYS_USER_SEQMINVALUE 1 NOMAXVALUE INCREMENT BY 1 START WITH 1 NOCACHE ;
2.設定觸發器
執行下邊語句
--建立觸發器create or replace trigger T_SYS_USER_USER_ID_TRIGGER before insert on SYS_USERS for each rowbegin select T_SYS_USER_SEQ.nextval into :new.user_id from dual;end T_SYS_USER_USER_ID_TRIGGER;
注意一下這四條資訊改成自己的就行了
T_SYS_USER_USER_ID_TRIGGER 是設定的觸發器名字
SYS_USERS是表名
T_SYS_USER_SEQ 是序列名
new.user_id 是 new.主鍵
3.插入的SQL
忽略id 直接插入, id資料庫自動添加
insert into sys_users(user_name,user_pwd,sex) values('shaoduo','shao111','男') ; commit ;