讓表的主鍵實現自動增長
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)
);
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,則觸發器創建不了