openGauss學習筆記-42 openGauss 高級數據管理-觸發器

文章目錄

    • openGauss學習筆記-42 openGauss 高級數據管理-觸發器
      • 42.1 語法格式
      • 42.2 參數說明
      • 42.3 示例

openGauss學習筆記-42 openGauss 高級數據管理-觸發器

觸發器會在指定的數據庫事件發生時自動執行函數。

42.1 語法格式

  • 創建觸發器

    CREATE TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }ON table_name[ FOR [ EACH ] { ROW | STATEMENT } ][ WHEN ( condition ) ]EXECUTE PROCEDURE function_name ( arguments );
    
  • 修改觸發器

    ALTER TRIGGER trigger_name ON table_name RENAME TO new_trigger_name;
    
  • 刪除觸發器

    DROP TRIGGER trigger_name ON table_name [ CASCADE | RESTRICT ];
    

42.2 參數說明

  • trigger_name

    觸發器名稱。

  • BEFORE

    觸發器函數是在觸發事件發生前執行。

  • AFTER

    觸發器函數是在觸發事件發生后執行。

  • INSTEAD OF

    觸發器函數直接替代觸發事件。

  • event

    啟動觸發器的事件,取值范圍包括:INSERT、UPDATE、DELETE或TRUNCATE,也可以通過OR同時指定多個觸發事件。

  • table_name

    觸發器對應的表名稱。

  • FOR EACH ROW | FOR EACH STATEMENT

    觸發器的觸發頻率。

    • FOR EACH ROW是指該觸發器是受觸發事件影響的每一行觸發一次。
    • FOR EACH STATEMENT是指該觸發器是每個SQL語句只觸發一次。

    未指定時默認值為FOR EACH STATEMENT。約束觸發器只能指定為FOR EACH ROW。

  • function_name

    用戶定義的函數,必須聲明為不帶參數并返回類型為觸發器,在觸發器觸發時執行。

  • arguments

    執行觸發器時要提供給函數的可選的以逗號分隔的參數列表。

  • new_trigger_name

    修改后的新觸發器名稱。

42.3 示例

--創建源表及觸發表
openGauss=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT);
openGauss=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);--創建觸發器函數
openGauss=# CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS$$DECLAREBEGININSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3);RETURN NEW;END$$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS$$DECLAREBEGINUPDATE test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1;RETURN OLD;END$$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS$$DECLAREBEGINDELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1;RETURN OLD;END$$ LANGUAGE PLPGSQL;--創建INSERT觸發器
openGauss=# CREATE TRIGGER insert_triggerBEFORE INSERT ON test_trigger_src_tblFOR EACH ROWEXECUTE PROCEDURE tri_insert_func();--創建UPDATE觸發器
openGauss=# CREATE TRIGGER update_triggerAFTER UPDATE ON test_trigger_src_tbl  FOR EACH ROWEXECUTE PROCEDURE tri_update_func();--創建DELETE觸發器
openGauss=# CREATE TRIGGER delete_triggerBEFORE DELETE ON test_trigger_src_tblFOR EACH ROWEXECUTE PROCEDURE tri_delete_func();--執行INSERT觸發事件并檢查觸發結果
openGauss=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300);
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl;  //查看觸發操作是否生效。--執行UPDATE觸發事件并檢查觸發結果
openGauss=# UPDATE test_trigger_src_tbl SET id3=400 WHERE id1=100;
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl;  //查看觸發操作是否生效--執行DELETE觸發事件并檢查觸發結果
openGauss=# DELETE FROM test_trigger_src_tbl WHERE id1=100;
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl;  //查看觸發操作是否生效--修改觸發器
openGauss=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed;--刪除觸發器
openGauss=# DROP TRIGGER insert_trigger ON test_trigger_src_tbl;
openGauss=# DROP TRIGGER update_trigger ON test_trigger_src_tbl;
openGauss=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl;

👍 點贊,你的認可是我創作的動力!

?? 收藏,你的青睞是我努力的方向!

?? 評論,你的意見是我進步的財富!

圖片

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

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

相關文章

Swagger-ui在idea中的使用

1.添加依賴 <!--添加swagger2相關概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相關功能--><de…

Linux學習之基本指令一

在學習Linux下的基本指令之前首先大家要知道Linux下一切皆目錄&#xff0c;我們的操作基本上也都是對目錄的操作&#xff0c;這里我們可以聯想我們是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;類比學習更容易理解。 目錄 01.ls指令 02. pwd命令 0…

SpringBoot登錄、退出、獲取用戶信息的session處理

1、登錄方法&#xff1a;login PostMapping("/user/login")public ResponseVo<User> login(Valid RequestBody UserLoginForm userLoginForm,HttpSession session) {ResponseVo<User> userResponseVo userService.login(userLoginForm.getUsername(), …

sql A表(含有部分B表字段) 向B表插入A表數據

今天遇到一個數據庫插入問題 向表中插入 生產狀態 為 2 的數據 但生產狀態為改為12 的所有數據 查看網上的評論 參考 insert into b (a,b,c) select ‘1’,‘2’,c from a where a1 這樣就可以a,b字段是插入指定某個值,而C字段則用表a的c字段. 最后解決了。忽然想起原來也有這…

實現Python對.json文件內容的讀取和寫入

要實現Python對.json文件內容的讀取和寫入&#xff0c;可以使用json庫。 首先&#xff0c;需要安裝json庫&#xff1a; pip install json 然后&#xff0c;可以編寫以下代碼來實現對.json文件內容的讀取和寫入&#xff1a; import json# 讀取json文件 with open(data.json, …

PS實現多個圖片轉化GIF動畫

PS實現多個圖片轉化為GIF動畫步驟 一、導入圖片素材1.打開PS軟件&#xff0c;點擊 [文件] --- [腳本] ---[將文件載入堆棧]2.選擇圖片3.導入成功 二、打開時間軸1.點擊[窗口]---[時間軸]2.選擇創建幀動畫3.創建幀動畫 三、創建動畫1.復制幀。2.設置幀的內容。3.修改圖片停留的時…

分布式應用:Zabbix監控Tomcat

目錄 一、理論 1.Zabbix監控Tomcat 二、實驗 1.Zabbix監控Tomcat 三、問題 1.獲取軟件包失敗 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客戶端日志報錯 一、理論 1.Zabbix監控Tomcat &#xff08;1&#xff09;環境 zabbix服務端&#xff1a;192.168.204.214 …

推薦 4 個 yyds 的 GitHub 項目

本期推薦開源項目目錄&#xff1a; 1. 開源的 Markdown 編輯器 2. MetaGPT 3. SuperAGI 4. 一個舒適的筆記平臺 01 開源的 Markdown 編輯器 Cherry 是騰訊開源的 Markdown 編輯器&#xff0c;基于 Javascript具有輕量簡潔、易于擴展等特點&#xff0c; 它可以運行在瀏覽器或服…

UVM學習知識點

這里是引用 include 和 import pkg區別 1.作用 include與C語言中類似&#xff0c;用于在一個文件中插入另一個文件&#xff1b;import用于在一個作用域中引入一個package&#xff08;或其中的內容&#xff09;&#xff0c;使得這些內容在當前作用域中可以不添加其所在的packag…

常用游戲運營指標DAU、LTV及參考范圍

文章目錄 前言運營指標指標范圍參考值留存指標的意義總結 前言 作為游戲人免不了聽到 DAU 、UP值、留存 等名詞&#xff0c;并且有些名詞聽起來還很像&#xff0c;特別是一款上線的游戲&#xff0c;這些游戲運營指標是衡量游戲業務績效和用戶參與度的重要數據&#xff0c;想做…

Tesseract用OpenCV進行文本檢測

我沒有混日子&#xff0c;只是辛苦的時候沒人看到罷了 一、什么是Tesseract Tesseract是一個開源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一種技術&#xff0c;它可以識別和解析圖像中的文本內容&#xff0c;使計算機能夠理解并處理…

Maven之mirrorof范圍

mirrorOf 是 central 還是 * 的問題 在配置阿里對官方中央倉庫的鏡像服務器時&#xff0c;我們使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共倉庫</name><url>…

vmalert集成釘釘告警

vmalert通過在alert.rules中配置告警規則實現告警&#xff0c;告警規則語法與Prometheus兼容&#xff0c;依賴Alertmanager與prometheus-webhook-dingtalk實現釘釘告警&#xff0c;以下步驟&#xff1a; 1、構建vmalert 從源代碼構建vmalert&#xff1a; git clone https://…

vue computed和watch的區別

conputed 原理 computed計算屬性,依賴一個值的變化而變化且具有緩存作用,computed在vue內部維護了一個dirty屬性,默認為true當取值的時候dirty為true,執行用戶的方法,且將值緩存起來吧dirty設為false再次取值的時候判斷dirty,dirty為false的時候直接從緩存里面取當依賴的數據…

在docker下進行mysql的主從復制

搭建步驟 1、拉取鏡像 docker pull mysql:latest2、查看鏡像 docker images3、創建啟動容器 Master docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:latestSlave docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWO…

企業權限管理(十)-用戶詳情

用戶詳情 UserController findById方法 Controller RequestMapping("/user") public class UserController {Autowiredprivate IUserService userService;//查詢指定id的用戶RequestMapping("/findById.do")public ModelAndView findById(String id) thro…

Sublime Text 4 Build 4151 4152 發布及注冊方法

Sublime Text 是一個商業代碼編輯器。它原生支持許多編程語言和標記語言&#xff0c;用戶可以通過插件來擴展它的功能&#xff0c;這些插件通常是由社區建立的&#xff0c;并以自由軟件許可證的形式維護。為了方便插件&#xff0c;Sublime Text 有一個 Python API。 Sublime T…

【劍指Offer 57】和為s的連續正數序列,Java解密。

LeetCode 劍指Offer 75道練習題 文章目錄 劍指Offer:和為s的連續正數序列示例:限制:解題思路:劍指Offer:和為s的連續正數序列 【題目描述】 輸入一個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。 序列內的數字由小到大排列,不同序列按照首…

糖尿病視網膜病變,黃斑病變,年齡相關檢測研究(Matlab代碼)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

VMware虛擬安裝Ubuntu,然后切換Ubuntu內核版本

無論你選擇哪種方法&#xff0c;一旦進入 GRUB 引導菜單&#xff0c;你應該能夠選擇需要的內核版本并啟動系統。 打開終端&#xff1a;你可以通過按下 Ctrl Alt T 快捷鍵來打開終端。 使用 sudo&#xff1a;切換內核需要管理員權限&#xff0c;因此你需要使用 sudo 命令。首…