1、简介
MySQL命令执行过程:
SQL命令 —— MySQL引擎(分析)—— 语法正确 —— 可识别命令 —— 执行(结果)
—— 返回客户端
存储过程:SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。
存储过程优点:
增强SQL语句的功能和灵活性
实现较快的执行速度
减少网络流量
2、存储过程语法
创建:
CREATE
[DEFINER = {user | CURRENT_USER}]
PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body
调用:
CALL sp_name([parameter[,...]])
CALL sp_name[()]
有参数时,小括号不能省略
删除:
DROP PROCEDURE [IF EXISTS] sp_name
修改:
不能修改过程体
只能修改简单特性
2.1 proc_parameter:
[ IN | OUT | INOUT ] param_name type
IN 表示参数的值必须在调用时指定
OUT 表示参数的值可以被存储过程改变,并且可以返回
INOUT 表示参数的调用时指定,并且可以被改变和返回
2.2 characteristic
2.3 过程体
合法SQL语句
可以使任意SQL语句(针对记录增删改查,连接)
过程体如果为复合结构则使用BEGIN...END语句
复合结构可以包含声明、循环、控制结构
3、例子
通过DELIMITER 修改定界符,多个语句放在BEGIN...END中
3.1 不带参数
3.2、带有IN类型参数
CREATE PROCEDURE procedure_name(IN in_name ...)
BEGIN
SQL name = in_name
END
参数名字不能与记录表名字相同
3.3 IN&OUT
@ name 用户变量
BEGIN END 中间为局部变量
CREATE PROCEDURE p_name(IN in_name ...,OUT out_name ...)
BEGIN
SQL 1
SQL2
END;
调用
CALL p_name(in_name_num,@name)
SELECT @name;
3.4 OUT
ROW_COUNT() 受到影响的个数
4、存储过程与自定义函数
前者功能复杂,函数针对性强;
存储过程可以返回多个值,函数只能返回一个值;
存储过程一般独立执行,函数可以作为其他SQL语句组成部分出现