數據庫觸發器Trigger

在數據庫管理系統中,觸發器(Trigger)是一種特殊的存儲過程,它在特定的事件發生時自動執行。觸發器通常用于維護數據的完整性和一致性。通過事件觸發而被執行,不能直接調用。

觸發器的三要素

觸發事件 before/after(insert、update、delete)

觸發條件 when

觸發動作 begin ... end

觸發器的分類

根據觸發時機和觸發事件的不同,觸發器可以分為以下幾種類型:行級觸發器與語句級觸發器

行級觸發器(Row-Level Trigger)在每一行數據受到影響時觸發,例如在插入、更新或刪除某一行數據時。

語句級觸發器(Statement-Level Trigger)則在執行一條SQL語句時觸發,無論該語句影響了多少行數據。

創建觸發器

SQL> creagte trigger <觸發器名>? [{before | after}]

{[inster | delete | update of 列名列表] }

on 表名

[ referencing <臨時視圖名>]

[ when <觸發條件>]

<觸發動作>

end [觸發器名]

說明:

update: 指明是update觸發器,每當update語句修改由of子句指定的列時,激發觸發器。如果忽略of子句,每當update修改表的任意列值時,都將激發觸發器。

referencing <臨時視圖名>:指定臨時視圖別名,在觸發器運行過程中,系統會生成另個臨時視圖分別存放被更新值舊值和新值(rollback用)。對于行級觸發器,默認臨時視圖名分別為old和new;對于語句級觸發器,默認臨時視圖名分別為old-table和new-table。

例如:

行級觸發器

觸發器中還可以回退修改使用rollback

SQL> create trigger bad_trg after update of balance on users

referencing new row as nrow, old row as orow

for each row

when nrow.balance < 0

begin

rollback

# 插入不良記錄

insert into bads select concat(borrows.userid, convert(varchar(100), getdate(), 10)), borrows.userid, brid, getdate()? from borrows? when nrow.userid = borrows.userid and etime is null

end

語句級觸發器

SQL> create trigger RAISE_LIMIT after update of SAL on EMP

referencing new table as n_tb,? old table as o_tb

for each statement

when (800 > (select avg(SAL) from EMP)

begin

delete from EMP where ENO in ( select ENO from n_tb ) insert into EMP ( select * from o_tb )

end

修改觸發器

SQL> alter? trigger bad_trg??after? update on?users
AS
BEGIN
? ? -- 新的觸發器邏輯
? ? PRINT 'Employee record has been updated.'
? ? -- 可以添加更多的邏輯,例如記錄日志或執行其他操作
END

刪除觸發器

SQL> drop? trigger bad_trg
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81370.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何利用 Java 爬蟲獲得某書筆記詳情:實戰指南

在知識分享和學習的領域&#xff0c;許多平臺提供了豐富的書籍筆記和學習資源。通過 Java 爬蟲技術&#xff0c;我們可以高效地獲取這些筆記的詳細信息&#xff0c;以便進行進一步的分析和整理。本文將詳細介紹如何利用 Java 爬蟲獲取某書筆記詳情&#xff0c;并提供完整的代碼…

主成分分析的應用之sklearn.decomposition模塊的PCA函數

主成分分析的應用之sklearn.decomposition模塊的PCA函數 一、模型建立整體步驟 二、數據 2297.86 589.62 474.74 164.19 290.91 626.21 295.20 199.03 2262.19 571.69 461.25 185.90 337.83 604.78 354.66 198.96 2303.29 589.99 516.21 236.55 403.92 730.05 438.41 225.80 …

【Redis】List 列表

文章目錄 初識列表常用命令lpushlpushxlrangerpushrpushxlpop & rpoplindexlinsertllen阻塞操作 —— blpop & brpop 內部編碼應用場景 初識列表 列表類型&#xff0c;用于存儲多個字符串。在操作和實現上&#xff0c;類似 C 的雙端隊列&#xff0c;支持隨機訪問(O(N)…

Android framework 中間件開發(三)

前兩篇我們講了中間件的開發和打包應用, Android framework 中間件開發(一) Android framework 中間件開發(二) 這邊我們來講一下在中間件中編寫JNI 1.新建C文件 找到frameworks\base\services\core\jni\路徑,新建一個cpp文件,文件名為com_android_server_DarkControlService.c…

深入了解linux系統—— 基礎IO(上)

文件 在之前學習C語言文件操作時&#xff0c;我們了解過什么是文件&#xff0c;這里簡單回顧一下&#xff1a; 文件存在磁盤中&#xff0c;文件有分為程序文件、數據文件&#xff1b;二進制文件和文本文件等。 詳細描述見文章&#xff1a;文件操作——C語言 文件在磁盤里&a…

Flink CDC—實時數據集成框架

Flink CDC 是一個基于流的數據集成工具&#xff0c;旨在為用戶提供一套功能更加全面的編程接口&#xff08;API&#xff09;&#xff0c;它基于數據庫日志的 CDC&#xff08;變更數據捕獲&#xff09;技術實現了統一的增量和全量數據讀取。 該工具使得用戶能夠以 YAML 配置文件…

ES(ES2023/ES14)最新更新內容,及如何減少內耗

截至2023年10月,JavaScript(ECMAScript)的最新版本是 ES2023(ES14)。 ES2023 引入了許多新特性,如findLast、toSorted等,同時優化了性能。通過減少全局變量、避免內存泄漏、優化循環、減少DOM操作、使用Web Workers、懶加載、緩存、高效數據結構和代碼壓縮,可以顯著降低…

常見的 Python 環境配置問題及解決方案

1. Python 環境配置的常見問題 初學者在配置 Python 環境時&#xff0c;可能會遇到以下幾類問題&#xff1a; 1.1 不同版本的兼容性 Python 目前有兩個主要版本系列&#xff1a;Python 2.x 和 Python 3.x。Python 2.x 已于 2020 年 1 月 1 日停止維護&#xff0c;因此強烈建…

day20-線性表(鏈表II)

一、調試器 1.1 gdb&#xff08;調試器&#xff09; 在程序指定位置停頓 1.1.1 一般調試 gcc直接編譯生成的是發布版&#xff08;Release&#xff09; gcc -g //-g調式版本&#xff0c;&#xff08;體積大&#xff0c;內部有源碼&#xff09;&#xff08;DeBug&#…

基于Spring Boot+Layui構建企業級電子招投標系統實戰指南

一、引言&#xff1a;重塑招投標管理新范式 在數字經濟浪潮下&#xff0c;傳統招投標模式面臨效率低、透明度不足、流程冗長等痛點。本文將以Spring Boot技術生態為核心&#xff0c;融合Mybatis持久層框架、Redis高性能緩存及Layui前端解決方案&#xff0c;構建一個覆蓋招標代理…

uniapp -- uCharts 儀表盤刻度顯示 0.9999999 這樣的值問題處理。

文章目錄 ??問題??解決方案??問題 在儀表盤上,23.8變成了 23.799999999999997 ??解決方案 formatter格式化問題 1:在 config-ucharts.js 或 config-echarts.js 配置對應的 formatter 方法 formatter: {yAxisDemo1: function (

git 對于已經追蹤,但沒有git add 的文件,撤回修改的方法

要撤銷對已追蹤文件的修改&#xff08;但尚未使用git add添加到暫存區&#xff09;&#xff0c;你可以使用以下幾種方法&#xff1a; 1. 使用 git restore (Git 2.23.0及更高版本) 這是較新版本Git中推薦的方式&#xff1a; # 撤銷單個文件的修改git restore <file># …

腳本語言Lua

本文來源 &#xff1a;騰訊元寶 Lua是一種輕量級、可嵌入的腳本語言&#xff0c;由巴西里約熱內盧天主教大學的Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年開發。其設計目標是嵌入應用程序中&#xff0c;提供靈活的擴展和定制功能。 主要特性…

ThingsBoard使用Cassandra部署時性能優化

1、概述 當遇到ThingsBoard設備數量特別多的時候,并且傳輸數據遙測點量特別大的時候,我們需要調整一下參數來進行優化,使其性能達到最佳的進行快速寫入。 注意:以下這些參數再系統部署的時候就需要規劃好配置,不能安裝好了再二次來進行配置。 2、Cassandra配置參數優化 …

Git Worktree 使用

新入職了一家公司&#xff0c;發現不同項目用的使用一個 git 倉庫管理。不久之后我看到這篇文章。 Git 的設計部??分是為了支持實驗。一旦你確定你的工作被安全地跟蹤&#xff0c;并且存在安全的狀態&#xff0c;以便在出現嚴重錯誤時可以恢復&#xff0c;你就不會害怕嘗試新…

維智定位 Android 定位 SDK

概述 維智 Android 定位 SDK是為 Android 移動端應用提供的一套簡單易用的定位服務接口&#xff0c;為廣大開發者提供融合定位服務。通過使用維智定位SDK&#xff0c;開發者可以輕松為應用程序實現極速、智能、精準、高效的定位功能。 重要&#xff1a;為了進一步加強對最終用…

【CSS】使用 CSS 繪制三角形

一、Border 邊框法&#xff08;最常用&#xff09; 原理&#xff1a;通過設置元素的寬高為 0&#xff0c;利用透明邊框相交形成三角形。 .triangle {width: 0;height: 0;border-left: 50px solid transparent; /* 左側邊框透明 */border-right: 50px solid transparent; /* …

RabbitMQ 快速上手:安裝配置與 HelloWorld 實踐(一)

一、引言 在當今分布式系統大行其道的技術浪潮下&#xff0c;各個服務之間的通信與協同變得愈發復雜。想象一下&#xff0c;一個電商系統在大促期間&#xff0c;訂單服務、庫存服務、支付服務、物流服務等眾多模塊需要緊密配合。如果沒有一種高效的通信機制&#xff0c;系統很容…

【deekseek】TCP Offload Engine

是的&#xff0c;TOE&#xff08;TCP Offload Engine&#xff09;通過專用硬件電路&#xff08;如ASIC或FPGA&#xff09;完整實現了TCP/IP協議棧&#xff0c;將原本由CPU軟件處理的協議計算任務完全轉移到網卡硬件中。其延遲極低的核心原因在于 硬件并行性、零拷貝架構 和 繞過…

JavaScript 的編譯與執行原理

文章目錄 前言&#x1f9e0; 一、JavaScript 編譯與執行過程1. 編譯階段&#xff08;發生在代碼執行前&#xff09;? 1.1 詞法分析&#xff08;Lexical Analysis&#xff09;? 1.2 語法分析&#xff08;Parsing&#xff09;? 1.3 語義分析與生成執行上下文 &#x1f9f0; 二…