最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySql 游標(biāo)和觸發(fā)器概念及使用詳解

 更新時(shí)間:2025年12月08日 10:41:26   作者:小鐘佳運(yùn)  
本文詳細(xì)介紹了MySQL中的游標(biāo),包括其定義、使用步驟及案例,以及觸發(fā)器的概念、創(chuàng)建和管理,游標(biāo)用于逐行處理查詢結(jié)果,而觸發(fā)器則在數(shù)據(jù)操作后自動(dòng)執(zhí)行特定操作,提升數(shù)據(jù)庫(kù)操作的靈活性和自動(dòng)化,感興趣的朋友跟隨小編一起看看吧

游標(biāo)

1.什么是游標(biāo)

MySQL游標(biāo)是一種數(shù)據(jù)庫(kù)對(duì)象,它用于在數(shù)據(jù)庫(kù)查詢過程中迭代訪問結(jié)果集中的每一行。游標(biāo)可以被看作是一個(gè)指向查詢結(jié)果集的指針,通過移動(dòng)游標(biāo),可以按行讀取和處理結(jié)果集的數(shù)據(jù)。在MySQL中,游標(biāo)可以用于在存儲(chǔ)過程或函數(shù)中處理復(fù)雜的業(yè)務(wù)邏輯,例如逐行處理查詢結(jié)果、循環(huán)操作數(shù)據(jù)等。使用游標(biāo)可以讓我們更加靈活地處理結(jié)果集。

2.使用游標(biāo)的步驟

游標(biāo)必須在聲明處理程序之前被聲明,并且變量和條件還必須在聲明游標(biāo)或處理程序之前被聲明。如果我們想要使用游標(biāo),一般需要經(jīng)歷四個(gè)步驟。不同的 DBMS 中,使用游標(biāo)的語法可能略有不同

2.1 聲明游標(biāo)

使用DECLARE關(guān)鍵字來聲明游標(biāo),其語法的基本形式如下:

DECLARE cursor_name CURSOR FOR select_statement;

要使用 SELECT 語句來獲取數(shù)據(jù)結(jié)果集,而此時(shí)還沒有開始遍歷數(shù)據(jù),這里 select_statement 代表的是SELECT 語句,返回一個(gè)用于創(chuàng)建游標(biāo)的結(jié)果集。比如:

DECLARE cur_score CURSOR FOR
	SELECT stu_id,grade FROM score;

2.2 打開游標(biāo)

OPEN 游標(biāo)名稱
-- 例如
open cur_score;

2.3 使用游標(biāo)

這句的作用是使用 cursor_name 這個(gè)游標(biāo)來讀取當(dāng)前行,并且將數(shù)據(jù)保存到 var_name 這個(gè)變量中,游標(biāo)指針指到下一行。如果游標(biāo)讀取的數(shù)據(jù)行有多個(gè)列名,則在 INTO 關(guān)鍵字后面賦值給多個(gè)變量名即可。
注意:var_name必須在聲明游標(biāo)之前就定義好.

FETCH cursor_name INTO var_name [, var_name] ...
FETCH cur_score INTO stu_id, grade ;

注意:游標(biāo)的查詢結(jié)果集中的字段數(shù),必須跟 INTO 后面的變量數(shù)一致,否則,在存儲(chǔ)過程執(zhí)行的時(shí)候,MySQL 會(huì)提示錯(cuò)誤

2.4 關(guān)閉游標(biāo)

CLOSE 游標(biāo)名稱;
CLOSE cur_score;

3.案例

創(chuàng)建一個(gè)存儲(chǔ)過程,實(shí)現(xiàn)累加考試成績(jī)最高的幾個(gè)學(xué)員的總分,直到總和大于我們傳入的limit_total_grade的參數(shù)值,并且返回累加的人數(shù):total_count;

CREATE PROCEDURE PROC_CURSOR(IN LIMIT_TOTAL_GRADE INT, OUT TOTAL_COUNT INT )
BEGIN
# 聲明相關(guān)的變量
DECLARE SUM_GRADE INT DEFAULT 0; # 累加的總成績(jī)
DECLARE CURSOR_GRADE INT DEFAULT 0; # 記錄某條成績(jī)
DECLARE SCORE_COUNT INT DEFAULT 0; # 記錄累加的記錄數(shù)
# 定義游標(biāo)
DECLARE SCORE_CURSOR CURSOR FOR SELECT GRADE FROM SCORE ORDER BY GRADE ;
# 打開游標(biāo)
OPEN SCORE_CURSOR;
# 使用游標(biāo)
REPEAT
FETCH SCORE_CURSOR INTO CURSOR_GRADE; # 從游標(biāo)中獲取一條數(shù)據(jù)
SET SUM_GRADE = SUM_GRADE + CURSOR_GRADE; # 成績(jī)累加
SET SCORE_COUNT = SCORE_COUNT + 1; # 記錄累加的次數(shù)
UNTIL SUM_GRADE > LIMIT_TOTAL_GRADE # 退出條件
END REPEAT ;
# 復(fù)制OUT參數(shù)
SET TOTAL_COUNT = SCORE_COUNT;
# 關(guān)閉游標(biāo)
CLOSE SCORE_CURSOR;
END;
DROP PROCEDURE PROC_CURSOR
# 調(diào)用存儲(chǔ)過程
SET @s_count = 0;
CALL PROC_CURSOR(400,@s_count) ;
SELECT @s_count;

觸發(fā)器

1.觸發(fā)器概述

MySQL觸發(fā)器是MySQL數(shù)據(jù)庫(kù)中的一種特殊對(duì)象,它允許在表中插入、更新或刪除數(shù)據(jù)時(shí)自動(dòng)執(zhí)行一系列指定的操作。觸發(fā)器可以在特定的數(shù)據(jù)庫(kù)操作(例如INSERT、UPDATE、DELETE)發(fā)生時(shí)被觸發(fā)。MySQL觸發(fā)器可以用于實(shí)現(xiàn)各種自動(dòng)化任務(wù)和業(yè)務(wù)邏輯。它們可以執(zhí)行諸如數(shù)據(jù)驗(yàn)證、審計(jì)記錄、數(shù)據(jù)同步等操作。通過觸發(fā)器,可以在數(shù)據(jù)庫(kù)層面上處理數(shù)據(jù)相關(guān)的邏輯,避免了在應(yīng)用程序中手動(dòng)編寫重復(fù)的代碼。

2.觸發(fā)器創(chuàng)建

2.1 語法結(jié)構(gòu)

CREATE TRIGGER 觸發(fā)器名稱
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
觸發(fā)器執(zhí)行的語句塊;

說明:

  • 表名 :表示觸發(fā)器監(jiān)控的對(duì)象。
  • BEFORE|AFTER :表示觸發(fā)的時(shí)間。BEFORE 表示在事件之前觸發(fā);AFTER 表示在事件之后觸發(fā)。
    INSERT|UPDATE|DELETE :表示觸發(fā)的事件。
    INSERT 表示插入記錄時(shí)觸發(fā);
    UPDATE 表示更新記錄時(shí)觸發(fā);
    DELETE 表示刪除記錄時(shí)觸發(fā)。
  • 觸發(fā)器執(zhí)行的語句塊 :可以是單條SQL語句,也可以是由BEGIN…END結(jié)構(gòu)組成的復(fù)合語句塊。

2.2 代碼案例

創(chuàng)建案例表

CREATE TABLE test_trigger (
id INT PRIMARY KEY AUTO_INCREMENT,
t_note VARCHAR(30) );
CREATE TABLE test_trigger_log (
id INT PRIMARY KEY AUTO_INCREMENT,
t_log VARCHAR(30)
);

創(chuàng)建觸發(fā)器:創(chuàng)建名稱為before_insert的觸發(fā)器,向test_trigger數(shù)據(jù)表插入數(shù)據(jù)之前,向test_trigger_log數(shù)據(jù)表中插入before_insert的日志信息。

CREATE TRIGGER BEFORE_INSERT
BEFORE INSERT ON TEST_TRIGGER
FOR EACH ROW
BEGIN
INSERT INTO TEST_TRIGGER_LOG(T_LOG)VALUES('BEFORE_INSERT ....') ;
END;

向test_trigger中插入對(duì)應(yīng)的記錄

insert into test_trigger(t_note)values('test data');

查看test_trigger_log中是否有記錄

select * from test_trigger_log;

3.查看和刪除

3.1 查看觸發(fā)器

方式1:查看當(dāng)前數(shù)據(jù)庫(kù)的所有觸發(fā)器的定義

SHOW TRIGGERS\G

方式2:查看當(dāng)前數(shù)據(jù)庫(kù)中某個(gè)觸發(fā)器的定義

SHOW CREATE TRIGGER 觸發(fā)器名

方式3:從系統(tǒng)庫(kù)information_schema的TRIGGERS表中查詢“salary_check_trigger”觸發(fā)器的信息

SELECT * FROM information_schema.TRIGGERS;

3.2 刪除觸發(fā)器

DROP TRIGGER IF EXISTS 觸發(fā)器名稱;

到此這篇關(guān)于MySql 游標(biāo)和觸發(fā)器概念及使用詳解的文章就介紹到這了,更多相關(guān)mysql游標(biāo)觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows下MySQL服務(wù)啟動(dòng)常見的兩種方式(適配5.7和8.0)

    Windows下MySQL服務(wù)啟動(dòng)常見的兩種方式(適配5.7和8.0)

    本文主要介紹了Windows下MySQL服務(wù)啟動(dòng)常見的兩種方式(適配5.7和8.0),文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • MySQL查詢優(yōu)化的5個(gè)實(shí)用技巧

    MySQL查詢優(yōu)化的5個(gè)實(shí)用技巧

    這篇文章主要介紹了MySQL查詢優(yōu)化的5個(gè)實(shí)用技巧,從數(shù)據(jù)類型、字符集、子查詢等角度分析了MySQL查詢優(yōu)化的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • mysql自增長(zhǎng)id用完了該怎么辦

    mysql自增長(zhǎng)id用完了該怎么辦

    如果你用過或了解過MySQL,那你一定知道自增主鍵了,下面這篇文章主要給大家介紹了關(guān)于mysql自增長(zhǎng)id用完了該怎么辦的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MySQL復(fù)制表常用的四種方式小結(jié)

    MySQL復(fù)制表常用的四種方式小結(jié)

    mysql?想必大家比較熟悉了,我們常見的crud??sql想必大家也是手到拈來,但可能會(huì)有人不會(huì)寫mysql中復(fù)制表,所以接下來本文我會(huì)介紹四種常用的復(fù)制表的方式,需要的朋友可以參考下
    2023-07-07
  • k8s上運(yùn)行的mysql、mariadb數(shù)據(jù)庫(kù)的備份記錄(支持x86和arm兩種架構(gòu))

    k8s上運(yùn)行的mysql、mariadb數(shù)據(jù)庫(kù)的備份記錄(支持x86和arm兩種架構(gòu))

    本文記錄在K8s上運(yùn)行的MySQL/MariaDB備份方案,通過工具容器執(zhí)行mysqldump,結(jié)合定時(shí)任務(wù)實(shí)現(xiàn)自動(dòng)備份,支持X86和ARM架構(gòu),并強(qiáng)調(diào)cron環(huán)境需轉(zhuǎn)義%符號(hào)及避免使用-it參數(shù),對(duì)k8s?mysql、mariadb數(shù)據(jù)庫(kù)備份步驟感興趣的朋友一起看看吧
    2025-06-06
  • MySQL分庫(kù)分表的幾種方式

    MySQL分庫(kù)分表的幾種方式

    這篇文章主要介紹了MySQL分庫(kù)分表的幾種方式,分庫(kù)分表方案是對(duì)關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)和訪問機(jī)制的一種補(bǔ)充,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • MySQL 空間碎片的查看與回收

    MySQL 空間碎片的查看與回收

    ySQL數(shù)據(jù)庫(kù)在運(yùn)行過程中可能會(huì)出現(xiàn)空間碎片的問題,本文就來介紹一下MySQL 空間碎片的查看與回收 ,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Mysql命令行導(dǎo)入sql數(shù)據(jù)

    Mysql命令行導(dǎo)入sql數(shù)據(jù)

    下面是在命令行下導(dǎo)入sql數(shù)據(jù)的方法,需要的朋友可以參考下。
    2010-03-03
  • mysql 數(shù)據(jù)插入優(yōu)化方法

    mysql 數(shù)據(jù)插入優(yōu)化方法

    當(dāng)一個(gè)線程對(duì)一個(gè)表執(zhí)行一個(gè)DELAYED語句時(shí),如果不存在這樣的處理程序,一個(gè)處理器線程被創(chuàng)建以處理對(duì)于該表的所有DELAYED語句。
    2010-12-12
  • MySQL重啟之后無法寫入數(shù)據(jù)的問題排查及解決

    MySQL重啟之后無法寫入數(shù)據(jù)的問題排查及解決

    客戶在給系統(tǒng)打補(bǔ)丁之后需要重啟服務(wù)器,數(shù)據(jù)庫(kù)在重啟之后,read_only 的設(shè)置與標(biāo)準(zhǔn)配置 文件中不一致,導(dǎo)致主庫(kù)在啟動(dòng)之后無法按照預(yù)期寫入,所以本文給大家介紹了MySQL重啟之后無法寫入數(shù)據(jù)的問題排查及解決,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

长白| 石门县| 饶河县| 邢台市| 叙永县| 德江县| 同仁县| 沾化县| 天长市| 临泽县| 商都县| 和政县| 萨嘎县| 永泰县| 财经| 宁明县| 外汇| 固镇县| 和顺县| 汝城县| 安龙县| 湟源县| 新竹县| 翁牛特旗| 余干县| 荣成市| 黎平县| 衡东县| 延安市| 西昌市| 罗江县| 孝昌县| 阳江市| 黑水县| 土默特右旗| 滨州市| 阳信县| 上蔡县| 三台县| 永昌县| 陆河县|