MYSQL存储过程入门1、语法以及in,out区别

时间:2022-04-23 11:25:01

1.什么是存储过程?
其实存储过程就是预编译了的SQL语句。
2.优点:
(1)提速: 只需要经过一次预编译,以后就可以直接调用该存储过程。如若有数百次的SQL语句执行,存储过程更快速,因为其经过了预编译。
(2)省流量:如有数百条SQL语句需要执行,就要发送数百条SQL语句的流量,而存储过程一条即可。
(3)安全:没有权限的用户可以有控制的情况下间接地执行存储过程。并且存储过程是一个结果,其中有多个相关的动作,一旦执行,多个动作是关联执行的,保存了数据在安全性和完整性。
(4)灵活:存储过程能像程序一样,实现多种功能。
缺点:
(1)类似面向过程,编程当逻辑复杂时,实现起来是挺麻烦的。
(2)调试麻烦,好像没什么比较好的工具,经常要打印来调。
(3)间接加重了数据库的负担,缓存并发严较多的时候比较明显。

MYSQL存储过程中的关键语法:
DELIMITER // 声明语句结束符,用于区分;
CREATE PROCEDURE exercise(IN j_in int) 声明存储过程
BEGIN …. END 存储过程开始和结束符号
SET @j_in=1 变量赋值
DECLARE l_int int unsigned default 4000000; 变量定义

DELIMITER // :相当于告诉MYSQL这是一个存储过程,等会有;的时候不要停止或者执行,直到出现DELIMITER;才表示该条存储过程结束,例子如下:
mysql> delimiter //
mysql> CREATE PROCEDURE exercise1(in j_in int)
-> begin
-> select j_in; –显示当前j_in的值
-> set j_in = 2; –把当前j_in的值设置为2
-> select j_in; –显示当前j_in的值
-> end;
-> // –结束
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ; –结束当前存储过程
mysql> call exercise1(@j_in); –执行该存储过程
+——+
| j_in |
+——+
| 4 | –先前设置为4,未贴代码
+——+
1 row in set (0.00 sec)

+——+
| j_in |
+——+
| 2 |
+——+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

这里涉及到一个元素的定义,in以及out ,in 可以在存储过程外面定义他的值 ,如上例中,我在执行CALL cxercise1(@j_in)前执行,SET @j_in = 3 ,那么第一个打印出来的select @j_in的值 就不是4,而是3.
out:在存储过程外面不可定义他的值,只能在存储过程中定义。
今天先这么多