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

MySQL自定義函數(shù)及觸發(fā)器

 更新時(shí)間:2022年08月04日 09:15:55   作者:Java學(xué)術(shù)趴  
這篇文章主要介紹了MySQL自定義函數(shù)及觸發(fā)器,自定義函數(shù)是一種對(duì)MySQL擴(kuò)展的途徑,其用法與內(nèi)置的函數(shù)相同,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

1. 存儲(chǔ)函數(shù)(自定義函數(shù))

  • 自定義函數(shù)是一種對(duì)MySQL擴(kuò)展的途徑,其用法與內(nèi)置的函數(shù)相同。
  • 定義函數(shù)的兩個(gè)必要條件:參數(shù)、返回值。函數(shù)可以返回任意類型的值,同樣可以接收這些類型的參數(shù)。

關(guān)于函數(shù)體:

  • 函數(shù)體是由合法的SQL語句構(gòu)成。
  • 函數(shù)體可以是簡單的SELECT或INSERT語句。
  • 函數(shù)體如果為符合結(jié)構(gòu)則使用BEGIN....AND語句包裹。
  • 復(fù)合結(jié)構(gòu)可以包含聲明、循環(huán)、控制結(jié)構(gòu)等等。

重點(diǎn):自定義的函數(shù)不能重名,類似于定義了一個(gè)全局變量,變量名不能一致。

1.1 定義存儲(chǔ)函數(shù)

語法格式:

create function 函數(shù)名(參數(shù)列表)
returns type(返回值類型)
begin
    --SQL語句
end;

需求:定義一個(gè)存儲(chǔ)過程的函數(shù),獲取滿足條件的總記錄條數(shù)

實(shí)現(xiàn):

delimiter $
create function fun(countryId int)
returns int 
begin
    # 定義一個(gè)存儲(chǔ)總數(shù)據(jù)條數(shù)的變量
    declare cum int default 0;
    # 查詢等于傳遞參數(shù)的全部的數(shù)據(jù)數(shù),然后將其賦值給定義的變量
 ? ?select count(*) into cum from city where country_id = countryId;
 ? ?# 返回結(jié)果值。存儲(chǔ)函數(shù)必須有返回值
 ? ?return cum;
end $

delimiter ;

1.2 調(diào)用存儲(chǔ)函數(shù)

語法格式:

select 函數(shù)名(參數(shù)列表);

注意:調(diào)用存儲(chǔ)過程的時(shí)候使用的是call關(guān)鍵字,但是在調(diào)用存儲(chǔ)函數(shù)的時(shí)候直接使用select即可,就和調(diào)用MySQL一個(gè)普通的聚合函數(shù)的方式一樣即可。

select fun(1);
# 這里和存儲(chǔ)過程一樣,調(diào)用的時(shí)候需要加小括號(hào)和參數(shù),但是在刪除的時(shí)候指定函數(shù)名即可

1.3 刪除存儲(chǔ)函數(shù)

語法格式

drop [if exists] function fun;

2. 觸發(fā)器

2.1 觸發(fā)器介紹

  • 觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對(duì)象,指在 insert/update/delete 之前或之后,觸發(fā)并執(zhí)行觸發(fā)器中定義的SQL集合。觸發(fā)器的這種特性可以協(xié)助應(yīng)用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性、日志記錄以及數(shù)據(jù)校驗(yàn)等操作。
  • 只有增加、刪除、修改的時(shí)候才可以使用觸發(fā)器,查詢的時(shí)候不可以使用觸發(fā)器。
  • 使用別名OLD和NEW來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫是相似對(duì)的。MySQL觸發(fā)器還只支持行級(jí)觸發(fā),不支持語句級(jí)觸發(fā)。oracle支持行級(jí)和語句級(jí)觸發(fā)器都支持。
  • OLD、NEW這兩個(gè)變量又叫做行記錄變量。可以通過這個(gè)兩個(gè)變量來獲取即將要操作的數(shù)據(jù)表中的數(shù)據(jù)。

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

語法格式:

create trigger(觸發(fā)器) trigger_name(觸發(fā)器名稱)
before/after insert/update/delete
on tab_name(表名)
[for each row](行級(jí)觸發(fā)器)
begin
    trigger_stmt;(觸發(fā)器的邏輯)
end;

需求:通過觸發(fā)器記錄 emp 表的數(shù)據(jù)變更日志 emp_logs ,其中包含增加、修改、刪除

實(shí)現(xiàn):

分析:一個(gè)觸發(fā)器只能操作一種數(shù)據(jù)的操作類型,不可以同時(shí)完成增加、修改、刪除的操作。所以此時(shí)需要定義多個(gè)觸發(fā)器來完成這個(gè)日志記錄的任務(wù)。

因?yàn)?MySQL中是行級(jí)操作的觸發(fā)器,所以 new 以及 old 中存儲(chǔ)的都是一整行數(shù)據(jù)。

創(chuàng)建執(zhí)行 insert 的觸發(fā)器:

  • 使用 new 關(guān)鍵字可以獲取到操作的數(shù)據(jù),在insert模式下,new變量中存儲(chǔ)的就是即將插入的數(shù)據(jù)
  • 使用的是 after ,在執(zhí)行完表 emp 的新增之后執(zhí)行這個(gè)觸發(fā)器記錄日志。
  • 這個(gè)觸發(fā)器什么時(shí)候執(zhí)行與兩點(diǎn)有關(guān):
    • 必須操作的是 emp 這個(gè)表,也就是on后面聲明的這個(gè)表。
    • 必須執(zhí)行的 insert 操作。

創(chuàng)建執(zhí)行 update 的觸發(fā)器:

此時(shí) old 變量中存儲(chǔ)的是被修改前的數(shù)據(jù),new 變量中存儲(chǔ)的是修改之后的數(shù)據(jù)

創(chuàng)建執(zhí)行 delete 的觸發(fā)器:

此時(shí)的 old 變量中存儲(chǔ)的即將刪除的數(shù)據(jù)

測(cè)試:測(cè)試都必須是操作的 emp 表,這樣才會(huì)觸發(fā)上邊定義的觸發(fā)器。

2.3 刪除觸發(fā)器

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

drop trigger [schema_name.](數(shù)據(jù)庫名)trigger_name(觸發(fā)器名);

如果沒有指定 schema_name(數(shù)據(jù)庫名),默認(rèn)為當(dāng)前數(shù)據(jù)庫。

2.4 查看觸發(fā)器

可以通過執(zhí)行 show triggers 命令查看觸發(fā)器的狀態(tài)、語法等信息。

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

show triggers;

到此這篇關(guān)于MySQL自定義函數(shù)以及觸發(fā)器的文章就介紹到這了,更多相關(guān)MySQL 觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL讀取Binlog日志常見的3種錯(cuò)誤

    MySQL讀取Binlog日志常見的3種錯(cuò)誤

    這篇文章主要介紹了MySQL讀取Binlog日志常見的3種錯(cuò)誤,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • 深入探究MySQL事務(wù)實(shí)現(xiàn)原理

    深入探究MySQL事務(wù)實(shí)現(xiàn)原理

    數(shù)據(jù)庫事務(wù)是指一組數(shù)據(jù)庫操作,這些操作必須被視為一個(gè)不可分割的單元,要么全部執(zhí)行成功,要么全部失敗回滾,本文詳細(xì)的給大家介紹了MySQL事務(wù)的實(shí)現(xiàn)原理,對(duì)我們學(xué)習(xí)MySQL有一定的幫助,感興趣的同學(xué)可以跟著小編一起來探究
    2023-06-06
  • MySQL查看所有連接的客戶端ip方式

    MySQL查看所有連接的客戶端ip方式

    這篇文章主要介紹了MySQL查看所有連接的客戶端ip方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 原來MySQL?數(shù)據(jù)類型也可以優(yōu)化

    原來MySQL?數(shù)據(jù)類型也可以優(yōu)化

    這篇文章主要介紹了原來MySQL?數(shù)據(jù)類型也可以優(yōu)化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-08-08
  • MySQL三大日志之binlog、redoLog、undoLog詳細(xì)講解

    MySQL三大日志之binlog、redoLog、undoLog詳細(xì)講解

    這篇文章主要介紹了MySQL三大日志之binlog、redoLog、undoLog的相關(guān)資料,,binlog是MySQL服務(wù)層的日志,記錄數(shù)據(jù)庫執(zhí)行的寫入性操作,redoLog是InnoDB存儲(chǔ)引擎層的日志,記錄數(shù)據(jù)頁的變更,undoLog也是InnoDB存儲(chǔ)引擎層的日志,記錄數(shù)據(jù)的邏輯變化,需要的朋友可以參考下
    2025-02-02
  • mysql的虛擬表(DUAL)的介紹及使用場景

    mysql的虛擬表(DUAL)的介紹及使用場景

    本文主要介紹了mysql的虛擬表(DUAL)的介紹及使用場景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解

    MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解

    這篇文章主要介紹了MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL中使用or、in與union all在查詢命令下的效率對(duì)比

    MySQL中使用or、in與union all在查詢命令下的效率對(duì)比

    這篇文章主要介紹了MySQL中使用or、in與union all在查詢命令下的效率對(duì)比,論證了在通常情況下union all并不一定比or及in更快,需要的朋友可以參考下
    2015-11-11
  • Mysql實(shí)現(xiàn)主從配置和多主多從配置

    Mysql實(shí)現(xiàn)主從配置和多主多從配置

    大型網(wǎng)站為了軟解大量的并發(fā)訪問,除了在網(wǎng)站實(shí)現(xiàn)分布式負(fù)載均衡,遠(yuǎn)遠(yuǎn)不夠。必然會(huì)想到假設(shè)服務(wù)器群,來分擔(dān)主數(shù)據(jù)庫的壓力。今天總結(jié)一下利用MySQL主從配置,減輕數(shù)據(jù)庫壓力
    2021-06-06
  • (MariaDB)MySQL數(shù)據(jù)類型和存儲(chǔ)機(jī)制全面講解

    (MariaDB)MySQL數(shù)據(jù)類型和存儲(chǔ)機(jī)制全面講解

    下面小編就為大家分享一篇(MariaDB)MySQL數(shù)據(jù)類型和存儲(chǔ)機(jī)制全面講解,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論

牡丹江市| 增城市| 伊春市| 卫辉市| 邯郸市| 高邑县| 长白| 千阳县| 宜都市| 张家界市| 湘阴县| 渑池县| 县级市| 揭西县| 宁城县| 桐庐县| 长岭县| 上林县| 栖霞市| 增城市| 盈江县| 雷州市| 滨州市| 甘孜县| 巩留县| 三台县| 和静县| 章丘市| 宁晋县| 宾川县| 淮安市| 五河县| 禄劝| 田阳县| 新津县| 平顺县| 成武县| 陈巴尔虎旗| 监利县| 通海县| 馆陶县|