oracle 觸發器trigger(主鍵自增加)

觸發器trigger

觸發器咱們也能夠認爲是存儲過程,是一種特殊的存儲過程。spa

存儲過程:有輸入參數和輸出參數,定義以後須要調用code

觸發器:沒有輸入參數和輸出參數,定義以後無需調用,在適當的時候會自動執行。blog

適當的時候:觸發器與表相關,當咱們對這個相關的表中的數據進行DDL(數據的添加、修改、刪除)操做的時候ci

 

存儲過程rem

觸發器it

create proc proc_nametable

    --聲明輸入參數和輸出參數class

asselect

    --過程體循環

go

create trigger tri_student_delete on student for delete

as

   …

go

 

:觸發器是在對應的操做執行完成以後才執行的

 

SQLServer的數據字典中,提供了一張表deleted用戶存儲最後一次執行刪除的數據

create trigger tri_student_delete on student for delete

as

   print '這是咱們的第一個觸發器';

   select * from deleted;

go

 

 

create trigger tri_student_insert on student for insert

as

   print '這是tri_student_insert';

go

 

 

create trigger tri_student_delete_insert on student for insert,delete

as

   print '觸發器';

go

 

 

--刪除一個學生信息,若是學生的年齡<21,則不進行刪除

create trigger tri_stu_delete on student for delete

as

   declare @age int

   select  @age=sage from deleted--deleted存儲執行刪除的數據

   if(@age<21)

   begin

      raiserror('學生年齡過小,手下留情!',18,11);

      rollback;--撤銷執行的操做

   end

go

 

序列

Create Sequence gygddj_cfjczb_Sequence
 Increment by 1     -- 每次加幾個 
 start with 1       -- 從1開始計數     
 nomaxvalue         -- 不設置最大值,設置最大值:maxvalue 9999  
 nocycle            -- 一直累加,不循環    
 cache 10; 

 

能夠與序列配合使用(實現自增)

 Create trigger gygddj_cfjczb_Sequence before 
 insert on gygddj_cfjczb for each row /*對每一行都檢測是否觸發*/
 begin
 select gygddj_cfjczb_Sequence.nextval into:New.AUTOID from dual;
 end;
相關文章
相關標籤/搜索