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

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

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

游標(biāo)

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

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

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

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

2.1 聲明游標(biāo)

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

DECLARE cursor_name CURSOR FOR select_statement;

要使用 SELECT 語句來獲取數(shù)據(jù)結(jié)果集,而此時還沒有開始遍歷數(shù)據(jù),這里 select_statement 代表的是SELECT 語句,返回一個用于創(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 這個游標(biāo)來讀取當(dāng)前行,并且將數(shù)據(jù)保存到 var_name 這個變量中,游標(biāo)指針指到下一行。如果游標(biāo)讀取的數(shù)據(jù)行有多個列名,則在 INTO 關(guān)鍵字后面賦值給多個變量名即可。
注意: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ù)一致,否則,在存儲過程執(zhí)行的時候,MySQL 會提示錯誤

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

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

3.案例

創(chuàng)建一個存儲過程,實(shí)現(xiàn)累加考試成績最高的幾個學(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; # 累加的總成績
DECLARE CURSOR_GRADE INT DEFAULT 0; # 記錄某條成績
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; # 成績累加
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)用存儲過程
SET @s_count = 0;
CALL PROC_CURSOR(400,@s_count) ;
SELECT @s_count;

觸發(fā)器

1.觸發(fā)器概述

MySQL觸發(fā)器是MySQL數(shù)據(jù)庫中的一種特殊對象,它允許在表中插入、更新或刪除數(shù)據(jù)時自動執(zhí)行一系列指定的操作。觸發(fā)器可以在特定的數(shù)據(jù)庫操作(例如INSERT、UPDATE、DELETE)發(fā)生時被觸發(fā)。MySQL觸發(fā)器可以用于實(shí)現(xiàn)各種自動化任務(wù)和業(yè)務(wù)邏輯。它們可以執(zhí)行諸如數(shù)據(jù)驗(yàn)證、審計記錄、數(shù)據(jù)同步等操作。通過觸發(fā)器,可以在數(shù)據(jù)庫層面上處理數(shù)據(jù)相關(guān)的邏輯,避免了在應(yī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)控的對象。
  • BEFORE|AFTER :表示觸發(fā)的時間。BEFORE 表示在事件之前觸發(fā);AFTER 表示在事件之后觸發(fā)。
    INSERT|UPDATE|DELETE :表示觸發(fā)的事件。
    INSERT 表示插入記錄時觸發(fā);
    UPDATE 表示更新記錄時觸發(fā);
    DELETE 表示刪除記錄時觸發(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中插入對應(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ù)庫的所有觸發(fā)器的定義

SHOW TRIGGERS\G

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

SHOW CREATE TRIGGER 觸發(fā)器名

方式3:從系統(tǒng)庫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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    mysql自增長id用完了該怎么辦

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

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

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

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

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

    MySQL分庫分表的幾種方式

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

    MySQL 空間碎片的查看與回收

    ySQL數(shù)據(jù)庫在運(yùn)行過程中可能會出現(xiàn)空間碎片的問題,本文就來介紹一下MySQL 空間碎片的查看與回收 ,具有一定的參考價值,感興趣的可以了解一下
    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)一個線程對一個表執(zhí)行一個DELAYED語句時,如果不存在這樣的處理程序,一個處理器線程被創(chuàng)建以處理對于該表的所有DELAYED語句。
    2010-12-12
  • MySQL重啟之后無法寫入數(shù)據(jù)的問題排查及解決

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

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

最新評論

东阿县| 门源| 称多县| 三亚市| 辽中县| 铜梁县| 济源市| 镇原县| 泰州市| 西昌市| 巨鹿县| 赤峰市| 海盐县| 贵港市| 庆城县| 贵州省| 博罗县| 黎川县| 平远县| 永安市| 祁东县| 厦门市| 象州县| 金寨县| 彭泽县| 进贤县| 扬州市| 九江市| 阿克苏市| 临江市| 论坛| 洛南县| 简阳市| 雷州市| 德惠市| 革吉县| 海南省| 舒城县| 刚察县| 修文县| 鸡泽县|