關係資料庫SQL之可編程性觸發器

来源:http://www.cnblogs.com/seayxu/archive/2016/05/16/5500066.html
-Advertisement-
Play Games

前言 前面[關係資料庫SQL之可編程性函數(用戶自定義函數)][1]一文提到關係型資料庫提供了可編程性的函數、存儲過程、事務、觸發器及游標,前文已介紹了函數、存儲過程、事務,本文來介紹一下觸發器的使用。( 還是以前面的銀行系統為例 ) ![圖片來自網路][0] 概述 觸發器(TRIGGER)是個特殊 ...


前言

前面關係資料庫SQL之可編程性函數(用戶自定義函數)一文提到關係型資料庫提供了可編程性的函數、存儲過程、事務、觸發器及游標,前文已介紹了函數、存儲過程、事務,本文來介紹一下觸發器的使用。(還是以前面的銀行系統為例)

圖片來自網路

概述

觸發器(TRIGGER)是個特殊的存儲過程,它的執行不是由程式調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( INSERT,DELETE, UPDATE)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。

觸發器分為兩種:AFTER觸發器和INSTEAD OF觸發器。

語法

  • 創建觸發器

    CREATE TRIGGER <觸發器名稱> 
       ON  <表名|視圖名> 
       [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
    AS 
    --SQL語句塊
  • 修改觸發器

    ALERT TRIGGER <觸發器名稱> 
       ON  <表名|視圖名> 
       [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
    AS 
    --SQL語句塊
  • 刪除觸發器

    DROP TRIGGER <觸發器名稱>

說明:

  1. AFTER觸發器主要用於在數據表執行INSERT,DELETE, UPDATE操作之後,同時操作其他表。
  2. INSTEAD OF觸發器會替代所要執行的SQL語句,也就是說所要執行SQL並不會真正執行,真正執行的是觸發器中定義的操作。
  3. AFTER觸發器只針對錶操作,INSTEAD OF觸發器除了操作表還可以作用於視圖,擴展視圖可以支持的更新操作。
  4. AFTER觸發器是在執行SQL之後觸發,而INSTEAD OF觸發器是在執行SQL之前觸發。
  5. 一個表的INSERT,DELETE, UPDATE操作可以有多個AFTER觸發器,有至多一個INSTEAD OF觸發器

特殊表

觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)

示例

1.AFTER觸發器示例
在取錢時,交易信息表裡面插入交易信息,同時要更改賬戶表裡面的餘額

--創建觸發器
CREATE TRIGGER Trigger_getMoney 
   ON  TransInfo 
   AFTER INSERT
AS 
declare @cardId varchar(19)
declare @tranMoney money
select @cardId  = CardID , @tranMoney = TransMoney from instered;
update CardInfo set LeftMoney = LeftMoney - @tranMoney where CardID = @cardId
GO

--執行插入操作
insert into TransInfo values('1324 3626 7532 1935','取款',500,default);

2.INSTEAD OF觸發器
指定的賬戶"422322001550135015"不可以刪除

--創建觸發器
CREATE TRIGGER Trigger_deleteAccount 
   ON  AccountInfo 
   INSTEAD OF DELETE
AS 
delete from AccountInfo where CardID != '422322001550135015' AND CardID=(select CardID from deleted)
--執行刪除操作

本文就介紹到這裡。
如有疑問請聯繫我。

原文來自:簡書


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 接上文Mysql的簡單使用(一) 欄位參數以“(欄位名1 數據類型1,欄位名2 數據類型2,......)”的形式構建。 關於mysql常用的數據類型,一下是比較常用的幾種,想查閱比較詳細的資料可以自尋去網上搜尋。 —————————————————————————————————————————— ...
  • 簡介: Mysql 參數優化 一、Mysql 源碼編譯參數 ## -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定 Mysql 安裝路徑## -DMYSQL_DATADIR=/usr/local/mysql/data 指定 Mysql 數據目錄## -DTMPDI ...
  • 成功安裝Oracle 11g後,共有7個服務,這七個服務的含義分別為:1. Oracle ORCL VSS Writer Service:Oracle捲映射拷貝寫入服務,VSS(Volume Shadow Copy Service)能夠讓存儲基礎設備(比如磁碟,陣列等)創建高保真的時間點映像,即映射 ...
  • 要實現的效果:查詢從Date From 到 To 之間的 所有日期; 示例代碼如下: DECLARE @DATE_FROM DATETIME = N'2016-05-16';--N'2015-05-16';DECLARE @DATE_TO DATETIME = N'2016-05-17';WITH ...
  • 一、準備工作 1.1、創建 zhuzz/tools目錄 1.2、將cmake-2.8.8.tar.gz|mysql-5.5.32.tar 上傳至 zhuzz/tools目錄 1.3、解壓cmake安裝包 [root@localhost tools]# tar xf cmake-2.8.8.tar.g ...
  • 檢查配置文件/etc/my.cnf發現供應商修改了mysql資料庫的數據存儲目錄,另外mysql.sock文件位置也變更為了/dat/data/mysql/mysql.sock 第一種方法,修改my.cnf的配置項,修改到'/var/lib/mysql/mysql.sock‘第二種方法:建立mysq ...
  • 如果你會查詢這些相關的問題,說明你是一個正在或者準備從事IT的程式猿,對於一個程式猿而言,不會使用linux系統的程式猿不是一好的程式猿哦!因為windows有時候真的讓人很抓狂,而本人也相信沒有什麼習慣是不可以改變的。so以下都是在linux系統中的使用: 安裝mysql命令 :$ sudo ap ...
  • 很多時候,當我執行查詢調優的時候,引發查詢性能糟糕的問題一般都是與參數化相關的。 一方面,參數化是查詢處理器核心的基本主題。它能顯著影響查詢性能。另一方面,大家很少對這一主題進行詳盡的瞭解。 因此我準備寫一個系列的隨筆來介紹關於參數化的問題。第一篇我將介紹關於計劃緩存的內容。為了理解參數化,有必要先 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...