1虎眨、簡(jiǎn)介
MySQL命令執(zhí)行過(guò)程:
SQL命令 —— MySQL引擎(分析)—— 語(yǔ)法正確 —— 可識(shí)別命令 —— 執(zhí)行(結(jié)果)
—— 返回客戶端
存儲(chǔ)過(guò)程:SQL語(yǔ)句和控制語(yǔ)句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。
存儲(chǔ)過(guò)程優(yōu)點(diǎn):
增強(qiáng)SQL語(yǔ)句的功能和靈活性
實(shí)現(xiàn)較快的執(zhí)行速度
減少網(wǎng)絡(luò)流量
2健芭、存儲(chǔ)過(guò)程語(yǔ)法
創(chuàng)建:
CREATE
[DEFINER = {user | CURRENT_USER}]
PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body
調(diào)用:
CALL sp_name([parameter[,...]])
CALL sp_name[()]
有參數(shù)時(shí)菲语,小括號(hào)不能省略
刪除:
DROP PROCEDURE [IF EXISTS] sp_name
修改:
不能修改過(guò)程體
只能修改簡(jiǎn)單特性
2.1 proc_parameter:
[ IN | OUT | INOUT ] param_name type
IN 表示參數(shù)的值必須在調(diào)用時(shí)指定
OUT 表示參數(shù)的值可以被存儲(chǔ)過(guò)程改變谎砾,并且可以返回
INOUT 表示參數(shù)的調(diào)用時(shí)指定楞陷,并且可以被改變和返回
2.2 characteristic
2.3 過(guò)程體
合法SQL語(yǔ)句
可以使任意SQL語(yǔ)句(針對(duì)記錄增刪改查,連接)
過(guò)程體如果為復(fù)合結(jié)構(gòu)則使用BEGIN...END語(yǔ)句
復(fù)合結(jié)構(gòu)可以包含聲明摹菠、循環(huán)盒卸、控制結(jié)構(gòu)
3、例子
通過(guò)DELIMITER 修改定界符次氨,多個(gè)語(yǔ)句放在BEGIN...END中
3.1 不帶參數(shù)
3.2蔽介、帶有IN類型參數(shù)
CREATE PROCEDURE procedure_name(IN in_name ...)
BEGIN
SQL name = in_name
END
參數(shù)名字不能與記錄表名字相同
3.3 IN&OUT
@ name 用戶變量
BEGIN END 中間為局部變量
CREATE PROCEDURE p_name(IN in_name ...,OUT out_name ...)
BEGIN
SQL 1
SQL2
END;
調(diào)用
CALL p_name(in_name_num,@name)
SELECT @name;
3.4 OUT
ROW_COUNT() 受到影響的個(gè)數(shù)
4、存儲(chǔ)過(guò)程與自定義函數(shù)
前者功能復(fù)雜煮寡,函數(shù)針對(duì)性強(qiáng)虹蓄;
存儲(chǔ)過(guò)程可以返回多個(gè)值,函數(shù)只能返回一個(gè)值幸撕;
存儲(chǔ)過(guò)程一般獨(dú)立執(zhí)行薇组,函數(shù)可以作為其他SQL語(yǔ)句組成部分出現(xiàn)