10 分钟带你搞定 MySQL 存储过程

10 分钟带你搞定 MySQL 存储过程平时我们写的 SQL 语句都是一条 SQL 语句执行一个结果,没办法执行复杂的判断,这时存储过程就派上用场了,存储过程可以把多个 SQL 语句组

大家好,欢迎来到IT知识分享网。

平时我们写的 SQL 语句都是一条 SQL 语句执行一个结果,没办法执行复杂的判断,这时存储过程就派上用场了,存储过程可以把多个 SQL 语句组合起来,完成复杂的运算结果,就像编程语言中的函数一样,可以在函数里实现判断,变量赋值等操作。

使用存储过程带来的优点:

  1. 提高执行性能
  2. 减轻网络负担
  3. 防止对表进行直接访问
  4. SQL代码可以重复使用
  5. 可以实现复杂的条件判断

在实际的生活中,很多行业的数据库都在使用存储过程,例如金融、企业、政府,可以说存储过程无处不在,学会使用它是你工作中必不可少的一项技能。

创建存储过程是有一套固定的语法:

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(); 语句执行这个存储过程,会返回一个结果集,如下图的样子。

10 分钟带你搞定 MySQL 存储过程

是不是太简单了,还不如写一条 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

(0)
上一篇 2024-09-21 17:00
下一篇 2024-09-21 19:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信