【MySQL学习篇】— 存储过程
什么是存储过程?
存储过程是一组SQL语句操作的集合,就相当于把一组SQL语句封装到“函数”里面,直接调用就能得到结果,不需要了解表结构。
例如:给员工加薪
#给员工加薪:(加薪的金额salary,员工编号id)
UPDATE emp SET salary=salary+500 WHERE id=3;
存储过程语法
#存储过程语法:create procedure 存储过程名(参数名1 参数类型1,参数名2…)
DELIMITER // #分隔符,表示一个整体,到下一个 // 结束
CREATE PROCEDURE 存储过程名(IN 输入参数名 参数类型,OUT 输出参数名 参数类型)
BEGIN
代码块;
END//
DELIMITER;
#删除存储过程(删除前判断改存储过程是否存在):
DROP PROCEDURE 【 IF EXISTS 】存储过程名;
#调用存储过程:call 存储过程名(实参);
实现加薪
DELIMITER //
CREATE PROCEDURE addSalary(money FLOAT,idd BIGINT)
BEGIN
UPDATE emp SET salary=salary+money WHERE id=idd;
END//
DELIMITER;
#调用
call addSalary(500,3);
带返回值的存储过程
#getSum实现求和功能 out 表示返回值
DELIMITER //
CREATE PROCEDURE getSum(IN i FLOAT,IN j FLOAT,OUT result FLOAT)
BEGIN
SET result=i+j;
END//
DELIMITER ;
带 if……else if…… 的存储过程
DELIMITER //
CREATE PROCEDURE buy(money FLOAT)
BEGIN
IF money>500 THEN
SELECT '买保时捷' as '买啥';
ELSEIF money>300 THEN
SELECT '买宝马';
ELSEIF money>10 THEN
SELECT '买奥拓';
ELSE SELECT '骑摩拜';
END IF;
END//
DELIMITER;
选择分支 case
DELIMITER //
CREATE PROCEDURE pro_case(i INT)
BEGIN
CASE i
WHEN 1 THEN
SELECT '星期一';
WHEN 2 THEN
SELECT '星期二';
ELSE
SELECT '你猜周几';
END CASE;
END//
DELIMITER;
while循环
#往表中循环加入数据
DELIMITER //
CREATE PROCEDURE proSum(i INT)
BEGIN
DECLARE a INT DEFAULT 1;#声明一个变量
SET a=2;
WHILE a<=i DO
INSERT INTO `person` SET `name`='test',weight=10;
SET a = a+1;#实现加 1
END WHILE;
END//
DELIMITER;
loop 循环
CREATE PROCEDURE 存储过程名()
BEGIN
loop循环别名:LOOP
循环体
LEAVE loop循环别名
END LOOP;
END;
#往表中循环加入数据
DELIMITER //
CREATE PROCEDURE testLoop(i INT)
BEGIN
DECLARE a INT DEFAULT 1;
testLoop1:LOOP
INSERT INTO person SET `name` ='admin',weight =200;
SET a=a+1;
IF a>i THEN
LEAVE testloop1;
END IF;
END LOOP;
END//
DELIMITER;