觸發器咱們也能夠認爲是存儲過程,是一種特殊的存儲過程。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;