Oracle資料庫主鍵自增的兩種方式(SEQUENCE和觸發器)

來源:互聯網
上載者:User

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 ;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.