大家好,欢迎来到IT知识分享网。
平时我们写的 SQL 语句都是一条 SQL 语句执行一个结果,没办法执行复杂的判断,这时存储过程就派上用场了,存储过程可以把多个 SQL 语句组合起来,完成复杂的运算结果,就像编程语言中的函数一样,可以在函数里实现判断,变量赋值等操作。
使用存储过程带来的优点:
- 提高执行性能
- 减轻网络负担
- 防止对表进行直接访问
- SQL代码可以重复使用
- 可以实现复杂的条件判断
在实际的生活中,很多行业的数据库都在使用存储过程,例如金融、企业、政府,可以说存储过程无处不在,学会使用它是你工作中必不可少的一项技能。
创建存储过程是有一套固定的语法:
CREATE PROCEDURE 名称([IN|OUT|INOUT] 参数名 参数数据类型 ) BEGIN 这里是一些sql语句 END
存储过程和函数很像,可以给它传入一些参数,也可以不指定任何参数。和函数也有一些细微的差别,他的参数名称前面有三个标识符 IN OUT INOUT,指定不同的标识有不同对的意思。IN 表示输入参数可以省略,OUT 表示输出参数,INOUT 表示即是出入参数,也是输出参数。
先来创建一条不带参数的存储过程。
CREATE PROCEDURE sp_abc() BEGIN -- 注意SELECT语句结尾需要分号结束 SELECT id FROM customer LIMIT 10; END
注释:“–”两个减号开头或“#”一个井号开头的字符串会被 MySQL 理解为注释,MySQL 会忽略之后的字符,不进行运行。
每条 SQL 语句需要分号结尾。
运行上面的代码,MySQL 数据库中创建了一个名为 sp_abc 的存储过程。
使用 CALL sp_abc(); 语句执行这个存储过程,会返回一个结果集,如下图的样子。
是不是太简单了,还不如写一条 SQL 语句,我们来创建一个稍微复杂一点的存储过程。
CREATE PROCEDURE sp_abc(IN p INT) BEGIN IF p = 10 THEN SELECT id FROM customer LIMIT 10; ELSE SELECT id FROM customer ; END IF; END
上面的定义了一个接收 p 参数的存储过程,如果给定的参数为10,那么运行第一条 SQL 语句,如果不是10运行第二个 SQL 语句。
接下来定义一个带有 OUT 参数的存储存储过程。
CREATE PROCEDURE sp_abc(IN p INT,OUT n INT) BEGIN IF p = 10 THEN SELECT id FROM customer LIMIT 10; ELSE SELECT id FROM customer ; END IF; SELECT FOUND_ROWS() INTO n; END
执行存储过程:
CALL sp_abc(10,@a); SELECT @a;
解释下关键点,第二个参数需要 @ 开头定义一个变量。FOUND_ROWS 函数取得前一条 SELECT 语句检索出来的记录条数,把这个记录条数赋值个变量 n,赋值的语法是 SELECT … INTO 变量名。
执行完前面的 CALL 语句,再使用 SELECT @a; 就可以看到 a 变量输出一个记录数。可以简单的理解为,FOUND_ROWS 函数的数值赋给变量 n,变量 n 在把他的数据赋给你定义的@a,这样外部就可以使用SELECT @a; 得到这个 n 变量的值了。
先整理下载存储过程中使用到的一些判断语句。
IF 语句
IF 判断条件 then 一些语句; ELSEIF 判断条件 THEN 一些语句; ELSE 一些语句; END IF;
WHILE 循环语句
WHILE 判断条件 DO 一些语句; END WHILE;
REPEEAT 语句,他和 WHILE 语句最大的区别就是这个语句至少会执行一次。
REPEAT 一些语句; UNTIL 判断条件 END REPEAT;
CASE 语句
CASE 变量 WHEN 1 THEN 当变量等于1时执行这里; WHEN 2 THEN 当变量等于2时执行这里; WHEN 3 THEN 当变量等于3时执行这里; ELSE 如果没有匹配到任何条件,执行这里; END CASE;
以上的语句大家可以自己测试下,这里就不细说了。
既然有各种判断语句,那么肯定也有变量的定义,在存储过程中定义的变量和其他编程语言是一样的,这些变量称为局部变量,局部变量就是只在存储过程中可以使用,外部是无法使用的。
局部变量定义的语法:
DECLARE 变量名 数据类型 [DEFAULT 初始值]
初始值是可有可无的,如果没有给出初始值,这个变量默认值为 NULL。在存储过程中,一个变量在使用前需要提前定义,要不然就无法使用。
定义好变量后,就可以使用语句更改这个变量的值了。
SET 变量名 = 新的值;
变量使用的例子:
CREATE PROCEDURE `sp_abc`() BEGIN DECLARE a INT DEFAULT 10; SET a = a+1; SELECT a; --结果输出 11 END
好的,小伙伴们,学会了吗。下篇给大家说说 MySQL 游标的使用。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/84115.html