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

詳解MySQL中的存儲過程和函數(shù)

 更新時間:2022年08月11日 08:33:54   作者:我的天才女友  
這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)庫中的存儲過程和函數(shù)的相關(guān)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

儲存過程和函數(shù)就是數(shù)據(jù)器將一些處理封裝起來,調(diào)用

區(qū)別

調(diào)用儲存過程只需要使用CALL,然后指定儲存名稱和參數(shù),參數(shù)可以是IN、OUT和INOUT

調(diào)用儲存函數(shù)只需要使用SELECT,指定名稱和參數(shù),儲存函數(shù)必須有返回值,參數(shù)只能是IN

優(yōu)點

  • 良好的封裝性
  • 應(yīng)用程序和SQL邏輯分離
  • 讓SQL也具有處理能力
  • 減少網(wǎng)絡(luò)交互
  • 能夠提高系統(tǒng)性能
  • 降低數(shù)據(jù)出錯的概率,保證數(shù)據(jù)的一致性和完整性
  • 保證數(shù)據(jù)的安全性

創(chuàng)建儲存函數(shù)和過程

儲存過程

create procedure sp_name ([proc_parameter[,…]]) [characteristic …] routine_body

create procedure 創(chuàng)建儲存過程關(guān)鍵字

sp_name 儲存過程名稱

proc_parameter 參數(shù)

characteristic 約束

routine_body 執(zhí)行體,使用BEGIN— END包括

proc_parameter

IN | OUT | INOUT param_name type

characteristic

language SQL 執(zhí)行體

[not] deterministic 得出的結(jié)果是否確定,不帶NOT 出入相同,默認(rèn)帶NOT

constains SQL 不包含讀寫SQL , no sql 不包含sql語句, reads sql data 讀數(shù)據(jù)的sql, modifies sql data 包含讀sql語句, 默認(rèn)contains sql

sql security definer 只有創(chuàng)建者菜能執(zhí)行 invoker 表示有權(quán)限訪問的就可執(zhí)行

comment 注釋

下面是創(chuàng)建一個儲存過程的定義,在對應(yīng)的工具中找到創(chuàng)建儲存過程的地方。

create PROCEDURE SelectAllData()
begin
select * from t_goods;
end 

創(chuàng)建好的儲存過程

儲存函數(shù)

create function func_name (func_parameter[,…]) returns type [characteristic …] routine_body

create function 創(chuàng)建儲存函數(shù)關(guān)鍵字

func_name 儲存函數(shù)名字

func_parameter 參數(shù),儲存函數(shù)只能是IN

returns type 返回數(shù)據(jù)類型

characteristic 函數(shù)約束

routine_body SQL執(zhí)行體

查看儲存過程

show create procedure sp_name

show procedure status like ‘’

從數(shù)據(jù)庫中information_schema中查詢

操作

call 調(diào)用

drop 刪除

alter 修改

變量

declare var_name[,…] type [default value]

declare 定義變量關(guān)鍵字

var_name 變量名稱

type 類型

[default value] 默認(rèn)值

declare totalprice decimal(10,2) default 0.00;

賦值

set 賦值

set totalprice = 399.99

查詢賦值

select sum(t_price) into totalprice from t_goods

變量例子

創(chuàng)建一個儲存過程使用變量的例子

CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectCountAndPrice`()
begin
declare totalcount int default 0;
declare totalprice, avgprice decimal(10, 2) default 0.00;
select count(*) into totalcount from t_goods;
select sum(t_price) totalprice from t_goods;
set avgprice = totalprice / totalcount;
select totalprice,totalcount,avgprice;
end

定義條件和處理過程

條件

declare condition_name condition for condition_value

condition_name 條件名稱

condition_value 條件類型

SQLSTATE [value] sqlstate_value | mysql_error_code

sqlstate_value 長度為5的錯誤信息

mysql_error_code 數(shù)值類型的錯誤代碼

declare exec_refused condition for sqlstate ‘48000’;

處理程序

declare handler_type handler for condition_value[,…] sq_statement

handler_type 定義錯誤的處理方式

condition_value 錯誤類型

sq_statement 遇到錯誤,需要執(zhí)行的儲存過程或函數(shù)

handler_type

continue 繼續(xù)處理

exit 退出

undo 撤回,目前不支持

condition_value

sqlstate [value] sqlstate_value

condition_name

sqlwarning

not found

sqlexception

mysql_error_code

  • sqlstate [value] sqlstate_value 長度為5的字符串的錯誤信息
  • condition_name 條件名稱
  • sqlwarning 所有以01開頭的sqlstate錯誤代碼
  • not found 所有以02開頭的sqlstate錯誤代碼
  • sqlexception 沒有被sqlwarning和not found 捕捉的錯誤代碼
  • mysql_error_code 數(shù)值類型錯誤

declare continue handler for sqlstate ‘29011’ set @log=’ database not found ’

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertDataNoCondition`()
BEGIN
    set @x = 1;
    insert into t_goodss (id,t_cate,t_remake,ages) values (3,'22','3333',10);
    set @x = 2;
    insert into t_goodss (id,t_cate,t_remake,ages) values (4,'22','3333',10);
    set @x = 3;
END

游標(biāo)

儲存過程查詢數(shù)據(jù)打,使用游標(biāo)對結(jié)果集循環(huán)處理。

聲明游標(biāo)

declare cursor_name cursor for select_statement;

cursor_name 游標(biāo)名稱

select_statement 查詢語句

打開游標(biāo)

open cursor_name

使用游標(biāo)

fetch cursor_name into var_name[,…]

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

close cursor_name

例子

定義一個StatisticsPrice的儲存過程,參數(shù)是totalprice,定義cursor_price 游標(biāo),將查詢的結(jié)果使用repeat 語句賦值于cursor_price,計算結(jié)果。

CREATE  PROCEDURE StatisticsPrice(OUT totalprice DECIMAL(10, 2))
BEGIN
    #Routine body goes here...
    declare price decimal(10,2) DEFAULT 0.00;
    declare cursor_price cursor for select t_price from t_goods;
    declare exit HANDLER FOr not found close cursor_price;
    set totalprice = 0.00;
    open cursor_price;
    repeat
  FETCH cursor_price into price;
    set totalprice= totalprice + price;
    until 0 END repeat;
    close cursor_price;
END

流程控制語句

if

loop (leave 退出當(dāng)前流程,iterate 跳出本次循環(huán))

while

case

以上就是詳解MySQL中的存儲過程和函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于MySQL存儲過程 函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql 8.0.22 下載安裝配置方法圖文教程

    mysql 8.0.22 下載安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.22 下載安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

    Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

    這篇文章主要介紹了Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • MySql完整卸載的四個步驟詳解

    MySql完整卸載的四個步驟詳解

    有時候MySQL不能完全卸載,這時候必須通過一些途徑刪除掉注冊表和一些殘余的文件,然后才能重新安裝才可以成功,下面這篇文章主要給大家介紹了關(guān)于MySql完整卸載的四個步驟,需要的朋友可以參考下
    2022-06-06
  • mysql記錄耗時的sql實例詳解

    mysql記錄耗時的sql實例詳解

    這篇文章主要介紹了mysql記錄耗時的sql實例詳解的相關(guān)資料,這里提供實現(xiàn)方法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • mysql中獲取一天、一周、一月時間數(shù)據(jù)的各種sql語句寫法

    mysql中獲取一天、一周、一月時間數(shù)據(jù)的各種sql語句寫法

    今天抽時間整理了一篇mysql中與天、周、月有關(guān)的時間數(shù)據(jù)的sql語句的各種寫法,部分是收集資料,全部手工整理,自己學(xué)習(xí)的同時,分享給大家,并首先默認(rèn)創(chuàng)建一個表、插入2條數(shù)據(jù),便于部分?jǐn)?shù)據(jù)的測試,其中部分名詞或函數(shù)進行了解釋說明。直入主題
    2014-05-05
  • 深入mysql "ON DUPLICATE KEY UPDATE" 語法的分析

    深入mysql "ON DUPLICATE KEY UPDATE" 語法的分析

    本篇文章是對mysql "ON DUPLICATE KEY UPDATE"語法進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySql游標(biāo)的使用實例

    MySql游標(biāo)的使用實例

    這篇文章主要介紹了MySql游標(biāo),需要的朋友可以參考下
    2014-06-06
  • MySql 8.0.16版本安裝提示已經(jīng)不使用“UTF8B3”而是使用“UTF8B4”問題

    MySql 8.0.16版本安裝提示已經(jīng)不使用“UTF8B3”而是使用“UTF8B4”問題

    這篇文章主要介紹了MySql 8.0.16版本安裝提示已經(jīng)不使用“UTF8B3”而是使用“UTF8B4”問題 ,需要的朋友可以參考下
    2019-07-07
  • percona 實用工具之pt-kill使用介紹

    percona 實用工具之pt-kill使用介紹

    一個優(yōu)秀的kill MySQL連接的一個工具,是percona toolkit的一部分,在因為空閑連接較多導(dǎo)致超過最大連接數(shù)、某個有問題的sql導(dǎo)致mysql負(fù)載很高時,都需要將一些連接kill掉,這個工具主要就是這個用途
    2016-04-04
  • MySQL深入淺出精講觸發(fā)器用法

    MySQL深入淺出精講觸發(fā)器用法

    觸發(fā)器是SQLserver提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲過程,事件是在 MySQL 5.1后引入的,有點類似操作系統(tǒng)的計劃任務(wù),但是周期性任務(wù)是內(nèi)置在MySQL服務(wù)端執(zhí)行的
    2022-08-08

最新評論

临西县| 忻城县| 青州市| 定结县| 马尔康县| 廊坊市| 普兰县| 桂阳县| 桂东县| 夹江县| 沽源县| 六枝特区| 永靖县| 晋州市| 临清市| 固镇县| 沂水县| 定安县| 广平县| 忻州市| 建湖县| 思茅市| 临沂市| 博湖县| 吉隆县| 宣威市| 蓬溪县| 潞西市| 扎囊县| 龙口市| 方山县| 桐柏县| 若羌县| 谷城县| 漳州市| 丰镇市| 嘉峪关市| 腾冲县| 隆尧县| 台东市| 修水县|