Mysql雜志(八)

游標

游標是MySQL中一種重要的數據庫操作機制,它解決了SQL集合操作與逐行處理之間的矛盾。這個相信大家基本上都怎么使用過,這個都是建立在使用存儲過程的基礎上的。我們都知道SQL都是批量處理的也就是面向集合操作(一次操作多行),而有些使用場景需要一行一行的處理這個時候就可以用到我們的游標了,當然我們一般情況下還是使用Java代碼分組分配處理的哈哈。因為對應小項目而言使用存儲過程還是太麻煩和太復雜了。

#游標的聲明
DECLARE cursor_name CURSOR FOR select_statement;
DECLARE emp_cursor CURSOR FOR  -實例SELECT id, name, salary FROM employees WHERE department = 'IT';#打開游標
OPEN cursor_name;
OPEN emp_cursor; -實例#獲取數據
FETCH cursor_name INTO var1, var2, ...;
DECLARE emp_id INT; -實例
DECLARE emp_name VARCHAR(50);
DECLARE emp_salary DECIMAL(10,2);
FETCH emp_cursor INTO emp_id, emp_name, emp_salary;#關閉游標
CLOSE cursor_name;
CLOSE emp_cursor; -實例#基礎使用
DELIMITER //
CREATE PROCEDURE process_employees()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE e_id INT;DECLARE e_name VARCHAR(100);DECLARE e_salary DECIMAL(10,2);-- 聲明游標DECLARE emp_cursor CURSOR FOR SELECT employee_id, name, salary FROM employees WHERE status = 'active';-- 聲明異常處理器DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN emp_cursor;read_loop: LOOPFETCH emp_cursor INTO e_id, e_name, e_salary;IF done THENLEAVE read_loop;END IF;-- 業務處理:薪資超過1萬加10%獎金IF e_salary > 10000 THENINSERT INTO bonuses(employee_id, amount) VALUES (e_id, e_salary * 0.10);END IF;END LOOP;CLOSE emp_cursor;
END //
DELIMITER ;

其實游標理解起來也很簡單,就是Mysql自己的迭代器,對每一行進行精細的處理,當然這樣的話速度肯定不夠原來的sql快的。

觸發器

觸發器(Trigger)是MySQL中的一種特殊存儲過程,它會在特定的數據庫事件發生時自動執行。觸發器與表緊密關聯,這個其實和我們Java中的監聽器是一個道理,監聽某一種行為如何做某件事,而Mysql的觸發器也是一樣的不需要顯示的調用就可以執行功能的。

觸發時機

數據操作

說明

BEFORE

INSERT

插入數據前觸發

AFTER

INSERT

插入數據后觸發

BEFORE

UPDATE

更新數據前觸發

AFTER

UPDATE

更新數據后觸發

BEFORE

DELETE

刪除數據前觸發

AFTER

DELETE

刪除數據后觸發

DELIMITER //
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
[trigger_order]
trigger_body
DELIMITER ;

這個就是觸發器的語法結構,其實和存儲過程的結構是類似的,只是關鍵詞不一樣。

變量

說明

可用時機

NEW.column

新數據值

INSERT/UPDATE

OLD.column

原數據值

UPDATE/DELETE

-- 示例:記錄員工薪資變更歷史
DELIMITER //
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGINIF OLD.salary != NEW.salary THENINSERT INTO salary_audit(employee_id, old_salary, new_salary, change_time) VALUES (NEW.id, OLD.salary, NEW.salary, NOW());END IF;
END //
DELIMITER ;

這個其實也是比較簡單的,大家看看也都會這么寫了,但是一般沒有什么使用的場景,因為寫到Java項目里代碼可讀性和日志查詢要比mysql看起來是更加的直觀的。

#查特定數據庫的觸發器
SHOW TRIGGERS FROM database_name;
-- 或
SHOW TRIGGERS LIKE 'pattern%';  -- 使用通配符#查某個表的觸發器
SHOW TRIGGERS WHERE `Table` = 'table_name';#獲取觸發器sql
SHOW CREATE TRIGGER trigger_name;

總結

本篇主要講了Mysql中的游標和觸發器的作用和使用場景。

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

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

相關文章

Dify 從入門到精通(第 71/100 篇):Dify 的實時流式處理(高級篇)

Dify 從入門到精通(第 71/100 篇):Dify 的實時流式處理 Dify 入門到精通系列文章目錄 第一篇《Dify 究竟是什么?真能開啟低代碼 AI 應用開發的未來?》介紹了 Dify 的定位與優勢第二篇《Dify 的核心組件:從…

日志分析與安全數據上傳腳本

最近在學習計算機網絡,想著跟python結合做一些事情。這段代碼是一個自動化腳本,它主要有三個功能:分析日志: 它從你指定的日志文件中讀取內容,并篩選出所有包含特定關鍵字的行。網絡交互: 它將篩選出的數據…

【論文閱讀】Sparse4D v3:Advancing End-to-End 3D Detection and Tracking

標題:Sparse4D v3:Advancing End-to-End 3D Detection and Tracking 作者:Xuewu Lin, Zixiang Pei, Tianwei Lin, Lichao Huang, Zhizhong Su motivation 作者覺得做自動駕駛,還需要跟蹤。于是更深入的把3D-檢測&跟蹤用sparse…

基于 DNA 的原核生物與微小真核生物分類學:分子革命下的范式重構?

李升偉 李昱均 茅 矛(特趣生物科技公司,email: 1298261062qq.com)傳統微生物分類學長期依賴形態特征和生理生化特性,這在原核生物和微小真核生物研究中面臨巨大挑戰。原核生物形態簡單且表型可塑性強,微小真核生物…

【FastDDS】Layer DDS之Domain (01-overview)

Fast DDS 域(Domain)模塊詳解 一、域(Domain)概述 域代表一個獨立的通信平面,能在共享通用通信基礎設施的實體(Entities)之間建立邏輯隔離。從概念層面來看,域可視為一個虛擬網絡&am…

http和https區別是什么

區別主要有以下四點:HTTP 是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS 則解決 HTTP 不安全的缺陷,在 TCP 和 HTTP 網絡層之間加入了 SSL/TLS 安全協議,使得報文能夠加密傳輸。HTTP 連接建立相對簡單&a…

推薦算法發展歷史

推薦算法的發展歷史是一部從簡單規則到復雜智能,從宏觀群體推薦到微觀個性化精準推薦的 演進史。它大致可以分為以下幾個階段:推薦算法的發展歷史是一部從簡單規則到復雜智能,從宏觀群體推薦到微觀個性化精準推薦的演進史。它大致可以分為以下…

企業DevOps的安全與合規關鍵:三大主流DevOps平臺能力對比

在數字化轉型的浪潮中,DevOps平臺已成為企業加速軟件交付、提升協作效率的核心引擎。然而,隨著應用范圍的擴大,安全漏洞與合規風險也隨之凸顯。如何平衡速度與安全,實現高效且合規的DevOps流程,已成為企業亟需解決的關…

pgroll:簡化PostgreSQL零停機遷移

pgroll:PostgreSQL零停機遷移的新思路作為后端開發者,我們都遇到過數據庫變更的難題。想象一下,你需要在電商大促期間修改用戶表結構——傳統的ALTER TABLE可能導致鎖表,用戶下單流程中斷,每分鐘都是真金白銀的損失。p…

JVM1.8與1.9的區別是什么?

一、核心機制變化 類加載器調整 JDK 1.8:使用三種類加載器: 啟動類加載器(Bootstrap):加載核心類庫(如 rt.jar)。擴展類加載器(ExtClassLoader):加載 JAVA_HO…

CentOS交換區處理

文章目錄前言創建交換文件(推薦)清理舊交換區前言 很多剛開始使用 CentOS 的用戶都會遇到。1GB 的交換分區在現代應用環境下確實偏小,很容易在內存壓力大時導致系統性能下降甚至應用程序被強制終止。 關于交換分區的大小,沒有一…

JavaScript原型與原型鏈:對象的家族傳承系統

文章目錄JavaScript原型與原型鏈:對象的"家族傳承"系統 👨👩👧👦引言:為什么需要原型?原型系統三大核心概念概念關系圖核心概念表一、原型基礎:對象如何"繼承"屬…

數據庫語法差異對比

特性MySQLMSSQLOraclepostgresql單行注釋--、#&#xff08;少&#xff09;------多行注釋/* *//* *//* *//* */字符串連接<code>CONCAT(str1,str2)</code>、<code>CONCAT_WS(separator, str1, str2)</code>、CONCAT&#xff08;str1,str2&#xff09;(…

GIS大學課程表都長啥樣?幾個地信專業的大學一周課程表

前幾天&#xff0c;有個準大一的同學問&#xff1a;地信大學課程安排都是啥樣的&#xff1f;簡單的地理學、遙感學課程之類的對準大一的同學們來說太抽象了&#xff0c;有沒有更具體一點的&#xff1f;他在新生群里問本校的學長&#xff0c;得到的課表不是這樣的&#xff1a;就…

leetcode 3027. 人員站位的方案數 II 中等

給你一個 n x 2 的二維數組 points &#xff0c;它表示二維平面上的一些點坐標&#xff0c;其中 points[i] [xi, yi] 。 我們定義 x 軸的正方向為 右 &#xff08;x 軸遞增的方向&#xff09;&#xff0c;x 軸的負方向為 左 &#xff08;x 軸遞減的方向&#xff09;。類似的…

oracle 從一張表更新到另外一張表的方法(MERGE)

之前更新表格經常用 update aaa set (aaa.q,aaa.w) (select bbb.q,bbb.w from bbb where bbb.eaaa.e)的方法 后面學習了一個新的方法&#xff0c;MERGE法&#xff0c;這種寫法更適合&#xff0c;因為對于空的值可以自定義定義其值&#xff0c;這樣寫存儲過程的時候就不需要頻繁…

Huggingface終于沒忍住,OpenCSG堅持開源開放

在全球人工智能競爭進入白熱化的當下&#xff0c;開源與閉源之路的選擇正在成為決定未來格局的關鍵。當全球最大的AI開源平臺Hugging Face終于承認"開源是贏得AI競賽的關鍵"&#xff0c;并呼吁美國重新重視開源賽道時&#xff0c;OpenCSG&#xff08;開放傳神&#x…

計算機網絡模型總概述

//網絡通訊 --- 不同主機之間的通信(進程間通信) 一、概述 目前使用的計算機網絡模型主要分為兩個&#xff1a;OSI七層模型和TCP/IP模型 相比OSI七層模型 &#xff0c;TCP/IP模型更簡潔&#xff0c;更實用&#xff0c;因此目前所使用的基本都是TCP/IP模型&#xff0c;已成為…

HTTPS -> HTTP 引起的 307 狀態碼與HSTS

1.應用場景 主要用于了解HSTS, 以及如何合理設置, 如正式服和測試服, 開發環境; 摘要&#xff1a;當HTTPS網站返回307狀態碼臨時重定向到HTTP時&#xff0c;會帶來安全風險&#xff08;如中間人攻擊和混合內容問題&#xff09;。 HSTS機制通過強制HTTPS通信可解決此問題&#…

PortSwigger靶場之DOM XSS in document.write sink using source location.search通關秘籍

一、靶場描述這個靶場在搜索查詢的跟蹤功能中&#xff0c;包含一個基于DOM的跨站腳本&#xff08;DOM-based XSS&#xff09;漏洞。該漏洞的產生是因為網站使用了一個名為 document.write 的 JavaScript 函數&#xff0c;這個函數會把數據直接寫入到頁面中。而寫入的數據來源于…