mysql procedure

1.应用

1)创建存储过程

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)
BEGIN
  # Set value of OUT parameter
  SELECT VERSION() INTO ver_param;
  # Increment value of INOUT parameter
  SET incr_param = incr_param + 1;
END;

2)使用存储过程

mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version           | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log |         11 |
+--------------------+------------+

API

1.语法

CREATE PROCEDURE p_name (IN param_in type,OUT param_out type, INOUT param_inout type)
BEGIN
	sql_statement;
END;
  • 过程名:p_name
  • 过程参数:
    IN:输入参数,参数名,类型
    OUT:输出参数,参数名,类型
    INOUT:输入输出参数,参数名,类型
    需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。
  • 过程体:以BEGIN开始,以END结束
未验证的信息
在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句。所以使用`DELIMITER $$`来改变结束符。

2.好处
1)封装性,相当于定义了函数
2)减少网络IO,全部在服务端运行,且比多次执行sql效率高
3)存储过程执行一次后,产生的二进制代码被缓存,再次调用的时候省去编译过程。

参考:
https://www.cnblogs.com/ccstu/p/12182933.html
https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html
https://www.zhihu.com/question/57545650 为什么阿里巴巴禁用存储过程?要看具体的业务场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值