mysql存储过程

基础流程、关键字:

流程

定义定界符

创建存储过程

存储过程开始

       过程体

存储过程结束

定义定界符

通过call进行调用。

关键字

DELIMITER定义定界符(如:DELIMITER//),mysql默认是分号。

CREATE PROCEDURE  : 创建存储过程(如:CREATE PROCEDURE test(in a int))

DROP PROCEDURE IF EXISTS : 存储过程如果存在就进行删除(如DROP PROCEDURE IF EXISTS test//)

BEGIN … … END// : 标识存储过程的开始与结束

DECLARE : 定义变量(如:DECLARE num int;)

@ : 定义全局变量,不需要进行定义,直接在前面加上@即可(如:SET @num=a+b;)

SET : 给变量赋值 (如:SET num=a+b;)

 

示例:

DELIMITER//  -- 定义边界符

DROP PROCEDURE IF EXISTS test//   -- 如果存在就进行删除

CREATE PROCEDURE test(in a INT,in b INT)  -- 创建存储过程

BEGIN  -- 过程体开始

SET @num=a+b;  -- 进行赋值

SELECT @num;  -- 进行输出

END//   -- 过程体结束

DELIMITER;   -- 将定界符修改为默认

-- 调用

CALL test(1,2);

 

条件控制语句

IF语句

结构:

If (判断条件)then

       …….

Else

       ……

End if;

示例:

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test(IN P_count INT)

BEGIN

IF p_count>10 THEN

       SELECT 'p_count大于十';

ELSE

       SELECT 'p_count小于等于十';

END IF;

END//

DELIMITER:

 

CALL test(11);

CASE语句

结构:

当var满足那个when就执行那个流程,如果都不满足就执行else

Case var

When 1 then

       ……

When 2 then

       ……

Else

       ……

End case;

示例:

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test(IN var INT)

BEGIN

CASE var

WHEN 1 THEN

       SELECT '星期一';

WHEN 2 THEN

       SELECT '星期二';

ELSE

       SELECT '其它';

END CASE;

END//

DELIMITER;

 

CALL test(2);

 

While语句

结构:

 

当条件为flase时跳出循环

While (判断条件) do

       ……

End while;

示例

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test(IN var INT)

BEGIN

DECLARE str VARCHAR(255) DEFAULT 'HZY';

WHILE var<10 DO

       SET str= CONCAT('I',' LOVE ','YOU ',str);

       SET var=var+1;

END WHILE;

       SELECT str;

END//

DELIMITER;

 

CALL test(9);

 

Repeat语句

它和while类似,区别在于,while是先检查在执行而repeat是先执行在检查,

While是满足条件进行循环,而Repeat是满足条件退出循环。

 

结构

Repeat

       。。。。。。 -- 先执行在进行判断

Until (判断条件)   -- 当达到此条件退出循环

End Repeat;

示例:

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test(IN var INT)

BEGIN

REPEAT

       SELECT 'hello world!';

       SET var=var+1;

UNTIL var > 10  -- 当达到此条件退出循环

END REPEAT;

END//

DELIMITER;

 

CALL test(11);

LOOP语句

直接进行循环,直到使用leave关键字标记了此次循环退出才会停止。

结构:

loop_test:lopp

       ……

If (判断条件) then

       leave loop_ test;

end if;

end loop;

示例:

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test(IN var INT)

BEGIN

test_loop:LOOP

       SELECT 'hello world!';

       SET var=var+1;

IF var > 10 THEN  -- 当满足条件后就会被标识退出

       LEAVE test_loop;

END IF;

END LOOP;

END//

DELIMITER;

 

CALL test(9);

游标

流程

1)定义游标结束标识

2)定义游标

3)将游标结束标识绑定到游标

4)打开游标

5)进行遍历取出游标中的多个值

6)进行操作

示例;

DELIMITER//

DROP PROCEDURE IF EXISTS test//

CREATE PROCEDURE test()

BEGIN

-- 定义变量

DECLARE username VARCHAR(30);

DECLARE paw VARCHAR(20);

-- 定义游标结束标识

DECLARE next TINYINT default TRUE;

-- 定义游标

DECLARE user_list CURSOR FOR SELECT user_name,user_password FROM tb_user;

-- 将游标结束标识绑定到游标

DECLARE CONTINUE HANDLER FOR NOT FOUND SET next = FALSE;

-- 打开游标

OPEN user_list;

-- 进行循环遍历游标

WHILE next DO

       -- 取除游标中的多个值

       FETCH user_list INTO username,paw;

       SELECT CONCAT(username,'===',paw);

END WHILE;

END//

DELIMITER;

 

CALL test();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值