龙空技术网

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

一个大龄蓉漂PHPer 401

前言:

现时姐妹们对“mysql列存储”大体比较关心,姐妹们都想要剖析一些“mysql列存储”的相关内容。那么小编也在网上汇集了一些有关“mysql列存储””的相关内容,希望咱们能喜欢,大家一起来了解一下吧!

平时我们写的 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 游标的使用。

标签: #mysql列存储 #mysql存储过程ifelseif