【SQL Server】-- 一觸即發之觸發器
一、什麼是觸發器?
觸發器(Trigger),顧名思義,一觸即發。
這裡的觸發指:呼叫某事件(如insert,delete,update)的時候執行觸發器的操作,就像連鎖反應一樣。
作用:保證資料完整性,加強資料的完整性約束和業務規則。說白了也就是保持資料一致性,不能同一欄位在不同的資料表裡面資料不一致。
二、觸發器的優缺點?
好處:
度娘如是說:在約束所支援的功能無法滿足應用程式的功能要求時,觸發器就極為有用。
解讀:約束此處應該指的是資料庫完整性約束。約束,觸發器,索引等都是為了保證資料的正確性和一致性而存在的。
常見約束:唯一性(Unique)和主鍵約束(Primary key)、外來鍵約束(Foreign key)、檢查約束(Check)、空值約束(NOT Null)、預設值約束(Defult)。
比如之前我們做過的《機房收費系統》,進行充值後,不僅僅要插入充值記錄到充值表裡面,還要更新學生的卡餘額,通過上面的這些約束,無法做到同時更新兩個表的資料,這就可以用到觸發器。這樣可以避免資料更新不同步造成的資料錯誤,不一致現象。
缺點:
物極必反,凡事存在兩面性。濫用觸發器同樣會給我們帶來麻煩。比如影響資料庫的結構,增加維護的複雜程度。
三、觸發器常見的應用-級聯刪除
學過《資料庫系統原理》的同學都應該對主外來鍵關係有所瞭解。如果一條SQL語句存在外來鍵,想要刪除該語句,就必須要先刪除外來鍵關聯的表中對應的語句。比如牛腩裡面的類別表(category)裡面包含新聞表(news)的外來鍵,新聞表(news)又包含評論表(comment)的外來鍵,要想刪除的時候要先根據新聞類別,找到該類別下的新聞,再找到新聞下的評論,先刪除評論,然後是新聞,再是新聞類別,才能進行刪除。
程式碼例項:
<span style="font-family:SimSun;"><span style="font-family:Microsoft YaHei;"><span style="font-family:SimSun;font-size:18px;">USE [newssystem]
GO
/****** Object: Trigger [dbo].[trigCategoryDelete] Script Date: 02/02/2015 23:22:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 王美
-- Create date: 2015年2月2日
-- Description:刪除類別觸發器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
declare @caId int--定義id
select @caId=id from deleted --從刪除的裡面取出id
--刪除評論
delete comment where newsId in(select newsId from news where caId=@caid )
--刪除新聞
delete news where caId =@caId --先刪除類別下面的所有新聞
--刪除類別
delete category where id =@caId --刪除該類別
END
</span></span></span>
四、總結
機遇之於人就像觸發器的事件,前提是要時刻完善自身的觸發器,這樣才不會與機遇失之交臂。
相關文章
- sql-server觸發器SQLServer觸發器
- SQL Server:觸發器詳解SQLServer觸發器
- SQL Server 觸發器詳情HOPPSQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- 淺入淺出SQL Server 觸發器SQLServer觸發器
- SQL Server實戰五:儲存過程與觸發器SQLServer儲存過程觸發器
- SQL觸發器例項講解SQL觸發器
- mysql觸發器MySql觸發器
- D觸發器觸發器
- SqlServer-觸發器SQLServer觸發器
- logon觸發器for dbaGo觸發器
- MySQL使用觸發器MySql觸發器
- 語句觸發器觸發器
- MySql-觸發器MySql觸發器
- sqlserver 列觸發器SQLServer觸發器
- 除錯觸發器除錯觸發器
- 建立MySQL觸發器MySql觸發器
- 25. 使用MySQL之使用觸發器MySql觸發器
- MySQL與SQL的觸發器的不同寫法MySql觸發器
- OGG DDL觸發器引發的故障系列(一)觸發器
- 觸發器 REFERENCING OLD AS OLD觸發器
- 行為和觸發器觸發器
- MySQL觸發器介紹MySql觸發器
- Oracle開發基礎-觸發器Oracle觸發器
- 誰才是真正的全光派?決戰一觸即發
- 邊緣觸發ET和水平觸發LT
- 觸發器的一些新認知觸發器
- mvvm模式 事件觸發器[wpf]MVVM模式事件觸發器
- MySQL入門-- TRIGGER(觸發器)MySql觸發器
- 《英雄聯盟:雙城之戰》11月7日全球首映,雙城之戰一觸即發
- 禁止oracle表的觸發器triggerOracle觸發器
- MSMQ 觸發器 安裝失敗MQ觸發器
- MySQL觸發器的使用規則MySql觸發器
- SqlServer觸發器的建立與使用SQLServer觸發器
- 星球大戰一觸即發,網路釣魚氾濫成災
- 取消事件觸發事件
- 雲開發 CloudBase 已上線觸發器能力Cloud觸發器
- bettertouchtool mac教程:如何新增一個新的觸發器Mac觸發器
- VR跨界一觸即發,探祕87870“魔都之夜”VR派對VR