【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觸發器SQLServer觸發器
- Sql Server系列:觸發器SQLServer觸發器
- SQL Server:觸發器詳解SQLServer觸發器
- SQL Server 觸發器詳情HOPPSQLServer觸發器
- SQL server觸發器簡單示例SQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- SQL觸發器SQL觸發器
- 淺入淺出SQL Server 觸發器SQLServer觸發器
- 淺談SQL Server觸發器的使用SQLServer觸發器
- 關於SQL SERVER觸發器的理解SQLServer觸發器
- 建立SQL觸發器SQL觸發器
- SQL觸發器(二)SQL觸發器
- SQL Server資料庫級別觸發器SQLServer資料庫觸發器
- SQL Server 觸發器的修改與刪除SQLServer觸發器
- Oracle之觸發器Oracle觸發器
- SQL Server 2005系列教學_ 觸發器SQLServer觸發器
- SQL Server約束和DML觸發器的比較SQLServer觸發器
- SQL Server中類似Oracle中before觸發器SQLServerOracle觸發器
- Oracle觸發器觸發級別Oracle觸發器
- SQL總結(六)觸發器SQL觸發器
- SQL Sever 2000中的前觸發器和後觸發器SQL觸發器
- SQL觸發器例項講解SQL觸發器
- sql2000觸發器SQL觸發器
- SqlServer基礎之(觸發器)SQLServer觸發器
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- SQL Server觸發器建立、刪除、修改、檢視示例步驟SQLServer觸發器
- SQL Server 2005中的DDL觸發器的實現SQLServer觸發器
- MySQL觸發器MySql觸發器
- mysql——觸發器MySql觸發器
- mysql 觸發器MySql觸發器
- Mysql觸發器:MySql觸發器
- Oracle觸發器Oracle觸發器
- SQL Server 2000中的觸發器使用SQLServer觸發器
- PL/SQL 07 觸發器 triggerSQL觸發器
- SQL資料庫觸發器例項SQL資料庫觸發器