mysql 存储过程
作者:广州小程序开发 时间:2018-06-19 22:40
在业务逻辑中从没用到过存储过程,而且之前忘了在哪看的说用存储过程会降低性能,不如直接用语言处理
这当然是很正确的,各干各的事
但有一个情况使用存储过程是很方便的
就是在生成测试数据,或者在mysql临时调试的时候
脱离语言的限制,直接用sql处理
个人的理解存储过程就相当于是函数
声明分隔符
DELIMITER
看到资料中 一般都是 DELIMITER //,其实 后面的符号可以随便写 比如 DELIMITER $$$
默认的分割符是; 但在 PROCEDURE 中用到;会使SQL立即执行(函数写了一半就执行了)
所以将分隔符改成个其他的东西,在末行 DELIMITER ; 改回来
若该过程已存在 则删除
DROP PROCEDURE IF EXISTS procedureName;
过程重复定义会报错,加上这一句
创建过程
CREATE PROCUDURE 名字(参数类型 参数 参数数据类型)
如 CREATE PROCEDURE test(IN id int)
过程接收一个参数,三种类型 ,分别是
IN OUT INOUT
传入(相当于函数形参),传出(相当于函数返回值),引用(相当于函数引用传值)
开始 和结束定位
BEGIN
...
END
一条语句的可以不用定位,直接跟在过程名 的后面
变量
声明变量 declare i int 这是一个局部变量
变量赋值 set i = 23
用户变量 @i 可以看做全局变量,可在过程内部直接使用
过程调用
CALL 过程名
这当然是很正确的,各干各的事
但有一个情况使用存储过程是很方便的
就是在生成测试数据,或者在mysql临时调试的时候
脱离语言的限制,直接用sql处理
个人的理解存储过程就相当于是函数
声明分隔符
DELIMITER
看到资料中 一般都是 DELIMITER //,其实 后面的符号可以随便写 比如 DELIMITER $$$
默认的分割符是; 但在 PROCEDURE 中用到;会使SQL立即执行(函数写了一半就执行了)
所以将分隔符改成个其他的东西,在末行 DELIMITER ; 改回来
若该过程已存在 则删除
DROP PROCEDURE IF EXISTS procedureName;
过程重复定义会报错,加上这一句
创建过程
CREATE PROCUDURE 名字(参数类型 参数 参数数据类型)
如 CREATE PROCEDURE test(IN id int)
过程接收一个参数,三种类型 ,分别是
IN OUT INOUT
传入(相当于函数形参),传出(相当于函数返回值),引用(相当于函数引用传值)
开始 和结束定位
BEGIN
...
END
一条语句的可以不用定位,直接跟在过程名 的后面
变量
声明变量 declare i int 这是一个局部变量
变量赋值 set i = 23
用户变量 @i 可以看做全局变量,可在过程内部直接使用
过程调用
CALL 过程名