黑莓、谷歌和高通合作:在第三代“驍龍汽車駕駛艙平臺”上虛擬化 Android Automotive OS
阿新 • • 發佈:2021-10-13
什麼是觸發器
觸發器是個特殊的儲存過程,不是由使用者觸發,是系統根據事件來觸發。對錶操作比如
新增,刪除,修改。 也就是在進行DML操作的時候可以觸發我們自己寫的邏輯
觸發器的作用:
資料同步(資料同步更新,同步修改), 做一些資料自定義約束.....,可以根據具體業務來實現
觸發時間:
操作之前和操作之後,比如新增之前執行,新增之後執行,更新之前,更新之後......
操作之前: instead of [事件]
操作之後: after [事件] / for [事件]
觸發器的語法:
create trigger 觸發器名稱
on 表 [時間] [事件]
as
begin
........觸發後具體要實現的功能...........
end
deleted:刪除資料時,臨時存放被刪除的資料(一行記錄)
inserted:插入資料時,臨時存放即將插入的資料(一行記錄)
基本使用:
使用者表新增之後執行的觸發器:
--exp:新增員工的時候,如果部門編號找不到,則自動新增部門資訊,部門名稱為"新部門" create trigger tri_InsertPeople on People --tri_InsertPeople:觸發器名字 after insert --Department:部門表 as --DepartmentId:部門id begin if not exists(select * from Department where DepartmentId = (select DepartmentId from inserted)) insert into Department(DepartmentId,DepartmentName) values((select DepartmentId from inserted),'新部門') end go
使用者表刪除之後執行的觸發器:
--exp:觸發器實現,刪除一個部門的時候將部門下所有員工全部刪除
create trigger tri_DeleteDept on Department
after delete
as
begin
delete from People where People.DepartmentId =
(select DepartmentId from deleted)
end
go
使用者表刪除之前執行的觸發器:
--exp:建立一個觸發器,刪除一個部門的時候判斷該部門下是否有員工,有則不刪除,沒有則刪除 create trigger tri_DeleteDept on Department Instead of delete as begin if not exists(select * from People where DepartmentId = (select DepartmentId from deleted)) begin delete from Department where DepartmentId = (select DepartmentId from deleted) end end go
使用者表修改之後執行的觸發器:
修改其實就是先把資料刪除,存在,deleted裡,然後在從inserted裡插入
--exp:修改一個部門編號之後,將該部門下所有員工的部門編號同步進行修改
create trigger tri_UpdateDept on Department
after update
as
update People set DepartmentId = (select DepartmentId from inserted)
where DepartmentId = (select DepartmentId from deleted)
go