觸發器trigger 觸發器我們也可以認為是存儲過程,是一種特殊的存儲過程。 存儲過程:有輸入參數和輸出參數,定義之後需要調用 觸發器:沒有輸入參數和輸出參數,定義之後無需調用,在適當的時候會自動執行。 適當的時候:觸發器與表相關,當我們對這個相關的表中的數據進行DDL(數據的添加、修改、刪除)操作 ...
觸發器trigger
觸發器我們也可以認為是存儲過程,是一種特殊的存儲過程。
存儲過程:有輸入參數和輸出參數,定義之後需要調用
觸發器:沒有輸入參數和輸出參數,定義之後無需調用,在適當的時候會自動執行。
適當的時候:觸發器與表相關,當我們對這個相關的表中的數據進行DDL(數據的添加、修改、刪除)操作的時候
存儲過程 |
觸發器 |
create proc proc_name --聲明輸入參數和輸出參數 as --過程體 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;