首页 常识

数据库存储过程怎么写(10 分钟带你搞定 MySQL 存储过程)

100次浏览     发布时间:2024-10-29 10:34:15    

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

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

相关文章:

留学去美国带多少现金01-21

出国波兰要多少钱01-21

布里斯班公交费多少01-21

去澳洲留学能带多少行李01-21

爱尔兰商学院学费多少01-21

28留学需要多少钱01-21

年终奖大家都发多少01-20

饭店多少平需要上喷淋01-20