国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

理解MySQL存儲過程和函數(shù)

2024-07-24 12:45:01
字體:
供稿:網(wǎng)友

一、概述 

一提到存儲過程可能就會引出另一個話題就是存儲過程的優(yōu)缺點,這里也不做討論,一般別人問我我就這樣回答你覺得它好你就用它。因為mysql中存儲過程和函數(shù)的語法非常接近所以就放在一起,主要區(qū)別就是函數(shù)必須有返回值(return),并且函數(shù)的參數(shù)只有IN類型而存儲過程有IN、OUT、INOUT這三種類型。

二、語法 

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

CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body CREATE FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type func_parameter: param_name type type: Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement or statements

語法來自官方自帶的參考手冊,characteristic語法塊是需要注意的地方,先用一個例子來介紹。

例子:

#創(chuàng)建數(shù)據(jù)庫DROP DATABASE IF EXISTS Dpro;CREATE DATABASE DproCHARACTER SET utf8;USE Dpro;#創(chuàng)建部門表DROP TABLE IF EXISTS Employee;CREATE TABLE Employee(id INT NOT NULL PRIMARY KEY COMMENT '主鍵', name VARCHAR(20) NOT NULL COMMENT '人名', depid INT NOT NULL COMMENT '部門id');#插入測試數(shù)據(jù)INSERT INTO Employee(id,name,depid) VALUES(1,'陳',100),(2,'王',101),(3,'張',101),(4,'李',102),(5,'郭',103);#創(chuàng)建存儲過程DROP PROCEDURE IF EXISTS Pro_Employee;DELIMITER $$CREATE PROCEDURE Pro_Employee(IN pdepid VARCHAR(20),OUT pcount INT )READS SQL DATASQL SECURITY INVOKERBEGINSELECT COUNT(id) INTO pcount FROM Employee WHERE depid=pdepid;END$$DELIMITER ;#執(zhí)行存儲過程CALL Pro_Employee(101,@pcount);SELECT @pcount;


語法解釋:

在創(chuàng)建存儲過程的時候一般都會用DELIMITER$$.....END$$ DELIMITER ;放在開頭和結(jié)束,目的就是避免mysql把存儲過程內(nèi)部的";"解釋成結(jié)束符號,最后通過“DELIMITER ;”來告知存儲過程結(jié)束。

主要解釋characteristic部分:

LANGUAGE SQL:用來說明語句部分是SQL語句,未來可能會支持其它類型的語句。

[NOT] DETERMINISTIC:如果程序或線程總是對同樣的輸入?yún)?shù)產(chǎn)生同樣的結(jié)果,則被認(rèn)為它是“確定的”,否則就是“非確定”的。如果既沒有給定DETERMINISTIC也沒有給定NOT DETERMINISTIC,默認(rèn)的就是NOT DETERMINISTIC(非確定的)CONTAINS SQL:表示子程序不包含讀或?qū)憯?shù)據(jù)的語句。

NO SQL:表示子程序不包含SQL語句。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 颍上县| 浮山县| 台南市| 清新县| 合江县| 江永县| 米易县| 深州市| 嵊泗县| 土默特左旗| 慈溪市| 柳林县| 南郑县| 隆回县| 龙井市| 商丘市| 泗洪县| 石景山区| 平塘县| 康保县| 永修县| 枣阳市| 舟曲县| 西藏| 巴里| 赤壁市| 金溪县| 连江县| 马鞍山市| 牡丹江市| 桓仁| 桐梓县| 秭归县| 山西省| 宿迁市| 绥宁县| 万年县| 浮梁县| 乌拉特前旗| 永新县| 榆树市|