觸發器-針對於表添加、刪除、修改(觸發)
對某張表進行添加動作,觸發動作,向另外一張表添加一條操作記錄
觸發器:兩種
觸發器-有約束的
觸發器-不帶約束
insert/delete/update 這三種操作數據庫實際上只有插入和刪除兩種,我們在對數據庫做修改操作的時候,其實系統是把新數據放到了系統的臨時表,刪除了當前數據后,把系統臨時表里的那條數據新增到了數據庫中!
系統臨時表 inserted(添加記錄,新數據) deleted(刪除記錄,舊數據)
創建觸發器
功能:如果對“產品表”進行增、刪、改操作,所有操作都會寫進 Log 表里
create trigger tri_ProductLog --創建觸發器 on Product --從產品表創建 for insert,update,delete --after instead of(可以刪除帶約束的表) as begin --相當於事務 --假如添加 declare @userid int --操作人 declare @action varchar(50) --動作(添加、刪除、修改) declare @count int=0 --統計數據記錄 if exists(select top 1 * from deleted)--判斷是否刪除動作(他這里判斷的依據是根據:“系統臨時表”的inserted【添加記錄,新數據】表和deleted【刪除記錄,舊數據】表) begin select @userid=CreateUserId from deleted set @action='刪除' set @count=@count+1 end if exists(select top 1 * from inserted) --判斷是否添加動作 begin select @userid=CreateUserId from inserted set @action='添加' set @count=@count+1 end if @count=2 --判斷是否是修改動作(因為是修改動作的話,上面2個if都會被執行,所以此時@count變量是2) begin select @userid=CreateUserId from deleted set @action='修改' end insert into Logs(logContent, CreateUserId) values('對產品表做了'+@action+'動作',@userid) end
測試上面觸發器的代碼
insert into Product(ProductNo,ProductName, Price,TypeId, CreateUserId) values(1003,'測試產品01',5000,1,10000)
delete from Product where ProductNo=1003
delete ProductType where typeid=1
修改觸發器
功能:如果刪除“產品分類”,那么這條分類下的所有產品都會被刪除!
--create alter trigger tri_Del_ProductType on ProductType instead of delete as begin declare @typeid int select @typeid=typeid from deleted print @typeid delete from Product where TypeId=@typeid end
測試代碼
delete ProductType where typeid=1