1. 程式人生 > >SQL Server:觸發器詳解

SQL Server:觸發器詳解

  • 1. 概述
  • 2. 觸發器的分類
  • 3. Inserted和Deleted表
  • 4. 觸發器的執行過程
  • 5. 建立觸發器
  • 6. 修改觸發器:
  • 7. 刪除觸發器:
  • 8. 檢視資料庫中已有觸發器:
  • 9. “Instead of”相關示例:
  • 10. “After”觸發器
  • 11. 參考資源

1. 概述

觸發器是一種特殊的儲存過程,它不能被顯式地呼叫,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。 所以觸發器可以用來實現對錶實施複雜的完整性約束。

2. 觸發器的分類

SQL Server2000提供了兩種觸發器:“Instead of” 和“After” 觸發器。

一個表或檢視的每一個修改動作(Insert、Update和Delete)都可以有一個“Instead of” 觸發器,一個表的每個修改動作都可以有多個“After”觸發器。

2.1 “Instead of”觸發器

  • “Instead of”觸發器在執行真正“插入”之前被執行。除表之外,“Instead of” 觸發器也可以用於檢視,用來擴充套件檢視可以支援的更新操作。
  • “Instead of”觸發器會替代所要執行的SQL語句,言下之意就是所要執行SQL並不會“真正執行”
123456789alter trigger trigger_學生_Deleteon 學生instead of Deleteasbeginselect 學號, 姓名 from deletedenddelete from 學生where 學號 = 4

上例中定義了“trigger學生_Delete”觸發器,該觸發器從“delete”表中打印出所要刪除的學生.在執行“delete”操作後,會發現“學號 = 4”的學生並未被刪除, 原因在於“trigger學生Delete”替代了所要執行的“delete from 學生 where 學號 = 4”語句,而在“trigger學生_Delete”中並未真正刪除學生。

2.2 “After”觸發器

  • “After”觸發器在Insert、Update或Deleted語句執行之後被觸發。“After”觸發器只能用於表。
  • “After”觸發器主要用於表在修改後(insert、update或delete操作之後),來修改其他表

3. Inserted和Deleted表

SQL Server為每個觸發器都建立了兩個專用表:Inserted表和Deleted表。

  • 這兩個表由系統來維護,它們存在於記憶體中而不是在資料庫中,可以理解為一個虛擬的表。
  • 這兩個表的結構總是與被該觸發器作用的表的結構相同。
  • 觸發器執行完成後,與該觸發器相關的這兩個表也被刪除。
  • Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。
  • Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。
對錶的操作Inserted邏輯表Deleted邏輯表
增加記錄(insert)存放增加的記錄
刪除記錄(delete)存放被刪除的記錄
修改記錄(update)存放更新後的記錄存放更新前的記錄

4. 觸發器的執行過程

  • 如果一個Insert﹑update或者delete語句違反了約束,那麼這條SQL語句就沒有執行成功,因此“After”觸發器也不會被啟用。

  • “Instead of” 觸發器可以取代激發它的操作來執行。它在Inserted表和Deleted表剛剛建立,其它任何操作還沒有發生時被執行。因為“Instead of” 觸發器在約束之前執行,所以它可以對約束進行一些預處理。

5. 建立觸發器

1234create trigger trigger_nameon  {table_name|view_name}{After|Instead of} {insert|update|delete}as 相應T-SQL語句

6. 修改觸發器:

1234alter trigger trigger_nameon  {table_name|view_name}{After|Instead of} {insert|update|delete}as 相應T-SQL語句

7. 刪除觸發器:

1drop trigger trigger_name

8. 檢視資料庫中已有觸發器:

8.1 檢視資料庫中所有觸發器

1select *from sysobjectswhere xtype='TR'

8.2 檢視單個觸發器

1exec sp_helptext'觸發器名'

9. “Instead of”相關示例:

兩張表:學生(學號 int, 姓名 varchar)、借書記錄(學號 int, 圖書編號 int)

實現功能:在刪除學生表時,如果該學生仍有借書記錄(未還)則不能刪除

12345678alter trigger trigger_學生_Deleteon 學生instead of Deleteasbeginif

相關推薦

SQL Server觸發器

1. 概述2. 觸發器的分類3. Inserted和Deleted表4. 觸發器的執行過程5. 建立觸發器6. 修改觸發器:7. 刪除觸發器:8. 檢視資料庫中已有觸發器:9. “Instead of”相關示例:10. “After”觸發器11. 參考資源1. 概述觸發器是一

IDEA , 用JDBC驅動連線SQL Server伺服器異常

本文適用於IDEA,sqlserver伺服器的使用者。 今天研究JDBC連線伺服器,一直琢磨了一晚上,才解決這個問題。 這類問題網上也有很多類似的部落格,但是不一定有用(本人親測),畢竟程式版本不同可能適用性就不同。 剛開始每次執行程式碼都是這樣的問題: 這是在資料庫連線成

win10 SQL SERVER 2017安裝

目錄 SQL Server 2017安裝 SSMS安裝 寫在之前 安裝的sql程式包是cn_sql_server_2017_developer_x64_dvd_11296175 在安裝之前最好是安裝了iis和關閉防火牆(如果沒有關閉,警告忽略即可)  

SQL Server 儲存過程

一. 什麼是儲存過程 系統儲存過程是系統建立的儲存過程,目的在於能夠方便的從系統表中查詢資訊或完成與更新資料庫表相關的管理任務或其他的系統管理任務。系統儲存過程主要儲存在master資料庫中,以“sp”下劃線開頭的儲存過程。儘管這些系統儲存過程在maste

win10 SQL SERVER 2017安裝

目錄 寫在之前 安裝的sql程式包是cn_sql_server_2017_developer_x64_dvd_11296175 在安裝之前最好是安裝了iis和關閉防火牆(如果沒有關閉,警告忽略即可) SQL Server 2017安裝 1、雙擊開啟set

VS2010、SQL Server 2008安裝

下載SQL SERVER2008     下載,具有高階服務的 Microsoft SQL Server 2008 Express 是 SQL Server Express 資料平臺的一款免費、易用的版本,它包括高階圖形管理工具(Management Studio),

SQL Server 2017 安裝

baidu font del nbsp 命名 出錯 圖片 shel microsoft SQL server 2017下載鏈接:https://pan.baidu.com/s/1FSzqJfHQAa0QpZ_fObrfjQ 提取碼:1xvb 1.雙擊iso鏡像文件

SQL Server中,觸發器

觸發器是一種特殊型別的儲存過程,它不同於之前的我們介紹的儲存過程。觸發器主要是通過事件進行觸發被自動呼叫執行的。而儲存過程可以通過儲存過程的名稱被呼叫。 Ø 什麼是觸發器     觸發器對錶進行插入、更新、刪除的時候會自動執行的特殊儲存過程。觸發器一般用在check約束更加複雜的約束上面。觸發器和普通的儲存

張小白的滲透之路(三)——SQL注入漏洞原理(SQL Server)

常見資料庫注入 對於大多數的資料庫而言,SQL注入的原理基本相似,因為每個資料庫都遵循一個SQL語法標準。但是他們之間也存在包括像語法、函式等許多細微的差異。所以,在針對不同的資料庫注入時,思路、方法也不可能完全一樣。因個人的經驗所限,在接下來的例項中,只討論O

Spark-Sql之DataFrame實戰

集合 case 編程方式 優化 所表 register 操作數 print ava 1、DataFrame簡介: 在Spark中,DataFrame是一種以RDD為基礎的分布式數據據集,類似於傳統數據庫聽二維表格,DataFrame帶有Schema元信息,即DataFram

zabbix3.0之server端部署

server 安裝 zabbix yum 配置 下載yum配置rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 安裝依賴包[[email

PL/SQL 遊標的使用

四個步驟 語法 list %type 查詢 dbms 打開 def default 一:通過遊標,PL/SQL 指向語句被分析以後的活動集 二:對於不同的SQL語句,遊標的使用情況不同:1:非查詢語句--隱式的2:結果是單行的查詢語句--隱式的或顯式的3:結果是多行的查詢語

ORACLE觸發器

etc 遊標 target with get ger 獨立 erer mon 作者:indexman 觸發器是許多關系數據庫系統都提供的一項技術。在oracle系統裏,觸發器類似過程和函數,都有聲明,執行和異常處理過程的PL/SQL塊。 8.1 觸發器類型 觸

tomcat中server.xml配置

連接超時 兩個 數據大小 value soc 訪客 ace sed 器)   Tomcat Server的結構圖如下:該文件描述了如何啟動Tomcat Server。 <Server port="8005" shutdown="SHUTDOWN"> &

郵箱學堂SPF

解決 ipv ptr 目前 明顯 架構 div 郵件服務器 pat 【中國郵箱網 電子郵件頻道】 1月18日,什麽是SPF?關於SPF的一些基礎知識有哪些?SPF有哪些需求?什麽是SPF的TXT記錄?本文的微軟Exchange專家圍繞SPF做了非常詳細的介紹與分析。

PL/SQL loop循環

重新 包含 proc out 語法 pre 操作 bool output 在PL/SQL中可以使用LOOP語句對數據進行循環處理,利用該語句可以循環執行指定的語句序列。常用的LOOP循環語句包含3種形式:基本的LOOP、WHILE...LOOP和FOR...LOOP。

SQL server “增刪改查” 之 “改”

image 表名 語法 多列 ring 意思 就會 單擊 行修改 1.前言 2.通過SSMS修改數據 3.通過SQL語句修改數據 3.1 修改單列數據 3.2 修改多列數據 1.前言 增刪改查都是對數據的操作,其中“改”對應的SQL語句便是“update”,也就是“更新

SQL server 主鍵和外鍵

技術分享 div 標識 reference create reat 按鈕 sse 是的 1.定義 1.1 什麽是主鍵和外鍵 1.2 主鍵和外鍵的作用 1.3 主鍵、外鍵和索引的區別 2.主鍵(primary key) 2.1 通過SSMS設置主鍵 2.2 通過SQL語

SQL server 建立數據庫和表

使用 char 分享 ase asp 找到 cpn cred 管理工具 2.建立數據庫 2.1 通過SSMS建立數據庫 2.2 通過SQL語句建立數據庫 3.建立表 3.1 通過SSMS建立表 3.2 通過SQL語句建立表 1.前言 配置是win10+SQL Ser

SQL server “增刪改查” 之 “增”

keyword 文件 ase ins gui lte dep 依次 下載 1.前言 2.通過SSMS添加數據 3.通過SQL語句添加數據 3.1 添加單條數據 3.2 添加多條數據 4.通過其他表導入數據 4.1 通過數據庫中的其他表導入數據 4.2 通過excel表