1. 程式人生 > 資訊 >黑莓、谷歌和高通合作:在第三代“驍龍汽車駕駛艙平臺”上虛擬化 Android Automotive OS

黑莓、谷歌和高通合作:在第三代“驍龍汽車駕駛艙平臺”上虛擬化 Android Automotive OS

什麼是觸發器

觸發器是個特殊的儲存過程,不是由使用者觸發,是系統根據事件來觸發。對錶操作比如
新增,刪除,修改。 也就是在進行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