日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 匿名块_MySQL存储过程定义中的特性(characteristic)的含义

發(fā)布時(shí)間:2023/12/2 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 匿名块_MySQL存储过程定义中的特性(characteristic)的含义 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL的存儲(chǔ)過(guò)程蠻啰嗦的,與MSSQL或者Oracle的存儲(chǔ)過(guò)程相比,如果沒(méi)有顯式指定,他會(huì)隱含地指定一系列特性(characteristic)的默認(rèn)值來(lái)創(chuàng)建存儲(chǔ)過(guò)程

通常在使用圖形界面工具進(jìn)行存儲(chǔ)過(guò)程編寫(xiě)的時(shí)候,圖形界面工具會(huì)自動(dòng)加上這部分內(nèi)容比,

如用HeidiSQL創(chuàng)建存儲(chǔ)過(guò)程的時(shí)候,會(huì)自動(dòng)生成這些特性(characteristic)的默認(rèn)值。

但是這些特性究竟是干啥的,有什么影響,一直沒(méi)有怎么弄清楚。

LANGUAGE SQL

存儲(chǔ)過(guò)程語(yǔ)言,默認(rèn)是sql,說(shuō)明存儲(chǔ)過(guò)程中使用的是sql語(yǔ)言編寫(xiě)的,暫時(shí)只支持sql,后續(xù)可能會(huì)支持其他語(yǔ)言

NOT DETERMINISTIC

是否確定性的輸入就是確定性的輸出,默認(rèn)是NOT DETERMINISTIC,只對(duì)于同樣的輸入,輸出也是一樣的,當(dāng)前這個(gè)值還沒(méi)有使用

CONTAINS SQL

提供子程序使用數(shù)據(jù)的內(nèi)在信息,這些特征值目前提供給服務(wù)器,并沒(méi)有根據(jù)這些特征值來(lái)約束過(guò)程實(shí)際使用數(shù)據(jù)的情況,說(shuō)白了就是沒(méi)有使用的

包括以下四種選擇

1.CONTAINS SQL表示子程序不包含讀或者寫(xiě)數(shù)據(jù)的語(yǔ)句

2.NO SQL 表示子程序不包含sql

3.READS SQL DATA 表示子程序包含讀數(shù)據(jù)的語(yǔ)句,但是不包含寫(xiě)數(shù)據(jù)的語(yǔ)句

4.MODIFIES SQL DATA 表示子程序包含寫(xiě)數(shù)據(jù)的語(yǔ)句。

SQL SECURITY DEFINER

用來(lái)指定存儲(chǔ)過(guò)程是使用創(chuàng)建者的許可來(lái)執(zhí)行,還是執(zhí)行者的許可來(lái)執(zhí)行,默認(rèn)值是DEFINER

DEFINER 創(chuàng)建者的身份來(lái)調(diào)用,對(duì)于當(dāng)前用戶(hù)來(lái)說(shuō):如果執(zhí)行存儲(chǔ)過(guò)程的權(quán)限,且創(chuàng)建者有訪問(wèn)表的權(quán)限,當(dāng)前用戶(hù)可以成功執(zhí)行過(guò)程的調(diào)用的

說(shuō)白了就是當(dāng)前用戶(hù)調(diào)用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程執(zhí)行的具體操作是借助定義存儲(chǔ)過(guò)程的user的權(quán)限執(zhí)行的。

INVOKER 調(diào)用者的身份來(lái)執(zhí)行,對(duì)于當(dāng)前用戶(hù)來(lái)說(shuō):如果執(zhí)行存儲(chǔ)過(guò)程的權(quán)限,以當(dāng)前身份去訪問(wèn)表,如果當(dāng)前身份沒(méi)有訪問(wèn)表的權(quán)限,即便是有執(zhí)行過(guò)程的權(quán)限,仍然是無(wú)法成功執(zhí)行過(guò)程的調(diào)用的。

說(shuō)白了就是當(dāng)前用戶(hù)調(diào)用存儲(chǔ)過(guò)程,只有當(dāng)前用戶(hù)有執(zhí)行存儲(chǔ)過(guò)程中涉及的對(duì)象的操作的權(quán)限的時(shí)候,才能成功執(zhí)行。

COMMENT ''

存儲(chǔ)過(guò)程的注釋性信息寫(xiě)在COMMENT里面,這里只能是單行文本,多行文本會(huì)被移除到回車(chē)換行等,一個(gè)字:扯

為什么說(shuō)這個(gè)扯淡呢?

通常情況下,樓主會(huì)注釋一個(gè)調(diào)用存儲(chǔ)過(guò)程的示例在備注里,以免自己活著別人在調(diào)試的時(shí)候,參數(shù)很多的時(shí)候,可以很快調(diào)用起來(lái),麻煩寫(xiě)半天參數(shù)之類(lèi)的

-- 因此就會(huì)存在類(lèi)似如下的注釋,但是注釋中的語(yǔ)句會(huì)被全部保存成一行,格式給抹掉了

/*

set @p_parameter1 = 'abc';

set @p_parameter2 = 200;

call mysql_procedure(@p_parameyter1,@p_parameter2)

*/

以下是一個(gè)存儲(chǔ)過(guò)程的demo,delimiter 僅僅是讓存儲(chǔ)過(guò)程知道,遇到delimiter定義的字符的時(shí)候是結(jié)束的標(biāo)記。

話說(shuō)MySQL不支持匿名塊就算了,定義存儲(chǔ)過(guò)程的時(shí)候,什么時(shí)候結(jié)束他自己都解析不出來(lái)?

delimiter KKKKKKKK(當(dāng)然是fuck也行)

CREATE DEFINER=`root`@`%` PROCEDURE `porcedureName`(in p_parameter1 varchar(200),in p_parameter2 int,out p_outparameter int)

-- 存儲(chǔ)過(guò)程語(yǔ)言,默認(rèn)是sql,說(shuō)明存儲(chǔ)過(guò)程中使用的是sql語(yǔ)言編寫(xiě)的,暫時(shí)只支持sql,后續(xù)可能會(huì)支持其他語(yǔ)言

LANGUAGE SQL

-- 是否確定性的輸入就是確定性的輸出,默認(rèn)是NOT DETERMINISTIC,只對(duì)于同樣的輸入,輸出也是一樣的,當(dāng)前這個(gè)值還沒(méi)有使用

NOT DETERMINISTIC

-- 提供子程序使用數(shù)據(jù)的內(nèi)在信息,這些特征值目前提供給服務(wù)器,并沒(méi)有根據(jù)這些特征值來(lái)約束過(guò)程實(shí)際使用數(shù)據(jù)的情況,說(shuō)白了就是沒(méi)有使用的

-- ONTAINS SQL表示子程序不包含讀或者寫(xiě)數(shù)據(jù)的語(yǔ)句

-- NO SQL 表示子程序不包含sql

-- READS SQL DATA 表示子程序包含讀數(shù)據(jù)的語(yǔ)句,但是不包含寫(xiě)數(shù)據(jù)的語(yǔ)句

-- MODIFIES SQL DATA 表示子程序包含寫(xiě)數(shù)據(jù)的語(yǔ)句

CONTAINS SQL

-- 用來(lái)指定存儲(chǔ)過(guò)程是使用創(chuàng)建者的許可來(lái)執(zhí)行,還是執(zhí)行者的許可來(lái)執(zhí)行,默認(rèn)值是DEFINER

-- DEFINER 創(chuàng)建者的身份來(lái)調(diào)用,如果創(chuàng)建者有權(quán)限訪問(wèn)存儲(chǔ)過(guò)程中的表,調(diào)用者有執(zhí)行過(guò)程的權(quán)限,就可以執(zhí)行

-- INVOKER 調(diào)用者的身份來(lái)執(zhí)行,取決于調(diào)用是否有執(zhí)行過(guò)程+執(zhí)行過(guò)程中sql語(yǔ)句對(duì)應(yīng)的權(quán)限

SQL SECURITY DEFINER

-- 存儲(chǔ)過(guò)程的注釋性信息寫(xiě)在COMMENT里面,這里只能是單行文本,多行文本會(huì)被移除到回車(chē)換行等,一個(gè)字:扯

-- 為什么說(shuō)這個(gè)扯淡呢?

-- 通常情況下,樓主會(huì)注釋一個(gè)調(diào)用存儲(chǔ)過(guò)程的示例在備注里,以免自己活著別人在調(diào)試的時(shí)候,參數(shù)很多的時(shí)候,調(diào)用起來(lái),麻煩寫(xiě)半天參數(shù)之類(lèi)的

-- 因此就會(huì)存在類(lèi)似如下的注釋,但是注釋中的語(yǔ)句會(huì)被全部保存成一行,格式給抹掉了

/*

set @p_parameter1 = 'abc';

set @p_parameter2 = 200;

call mysql_procedure(@p_parameyter1,@p_parameter2)

*/

COMMENT ''

begin

select * from user where id = 100;

end

KKKKKKKK(delimiter是fuck的話,這里就是fuck了,結(jié)尾的標(biāo)記而已)

總結(jié)

以上是生活随笔為你收集整理的mysql 匿名块_MySQL存储过程定义中的特性(characteristic)的含义的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。