平时我们写的 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
相关文章:
留学去美国带多少现金01-21
出国波兰要多少钱01-21
布里斯班公交费多少01-21
去澳洲留学能带多少行李01-21
爱尔兰商学院学费多少01-21
28留学需要多少钱01-21
年终奖大家都发多少01-20
饭店多少平需要上喷淋01-20