oracle 主鍵自增

讓表的主鍵實現自動增長

create table STUDENT
(
ID NUMBER not null,
NAME VARCHAR2(20) default '男',
SEX VARCHAR2(4),
ADDRESS VARCHAR2(40),
MEMO VARCHAR2(60)
)

現在我想實現每插入一條數據,就讓id自動增長1.在SQLSERVER中這個很好實現,但在oracle中我搞了半天,查了下資料發現要用到“序列(sequence)”,“觸發器”的知識。

首先,創建一個序列:

create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;

然後,給表student創建一個觸發器:

create or replace trigger stu_tr
before insert on student 
for each row

首先,創建一個序列:

create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;

然後,給表student創建一個觸發器:

create or replace trigger stu_tr
before insert on student 
for each row
declare
-- local variables here
begin
select stu.nextval into :new.id from dual;
end stu_tr;


*******************************************************************************************************************************

下面用一個例子來說明自增主鍵的創建:

1、建用戶數據表
      drop table dectuser;
      create table dectuser(
           userid integer primary key, /*主鍵,自動增加*/
           name varchar2(20),
          sex varchar2(2)
           );

2、創建自動增長序列
      drop sequence dectuser_tb_seq;
      create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
               increment by 1
               start with 1;   /*步長爲1*/
3、創建觸發器
      create or replace trigger dectuser_tb_tri
          before insert on dectuser     /*觸發條件:當向表dectuser執行插入操作時觸發此觸發器*/
           for each row                        /*對每一行都檢測是否觸發*/
           begin                                  /*觸發器開始*/
                 select dectuser_tb_seq.nextval into :new.userid from dual;   /*觸發器主題內容,即觸發後執行的動作,在此是取得序列dectuser_tb_seq的下一個值插入到表dectuser中的userid字段中*/
          end;
    
          /                                        /*退出sqlplus行編輯*/
4、提交
       commit;

       現在就完成了自增主鍵的設定,搞定!可以檢測一下。
      insert into dectuser(name,sex) values ('wang','女');

      提示“已創建一行”,表示成功。呵呵:D

      要注意的是主鍵數據類型如果爲number,則觸發器創建不了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章