mysql 存储过程及事务实例

1.存储过程:

题目:使用循环显示1-20之间的奇数

代码:

CREATE PROCEDURE SHOW()

BEGIN


DECLARE num INT;
DECLARE n INT;
SET n=1;



CREATE TEMPORARY TABLE temp_usp_00(name int );

WHILE n<=20 DO



IF n%2!=0 THEN
INSERT INTO temp_usp_00(name) VALUES(n);
END IF;


SET n=n+1;

END WHILE;

SELECT * FROM temp_usp_00;
DROP TABLE temp_usp_00;

END

2事务

题目:

数据库productorder。

需求说明:马云买了一部iphone7,使用事务处理。

需要完成的操作:

思路:

1.定义变量:t_error 让它自动捕获系统错误

DECLARE t_error INTEGER DEFAULT 0; 

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 

2.获得iphone7手机的产品ID,(从product表中查询给变量赋值)

3.生成订单(insert order)。

4.并查询出生产订单的编号:SELECTLAST_INSERT_ID() into @orderNum;

5.判断t_error,如果等于1,回滚,其他,commit;

提示:使用存储过程并将手机品牌Sname、客户ID、购买数量number作为输入参数。

代码:

 BEGIN
#Routine body goes here..
DECLARE pid1 INT;
DECLARE cid1 INT;
DECLARE num int;
DECLARE sname1 VARCHAR(20);
DECLARE date1 Date;
DECLARE t_error INT DEFAULT 0;  
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;//第一步


START TRANSACTION;
set cid1=id;
SET pid1=1;
SET sname1=sname;
SET num=number;

//第二步,获得iphone7手机的产品ID
SELECT p.pid INTO pid1
FROM product p
WHERE p.pname=sname1;


SELECT CURDATE() into date1;

//第三步,生成订单,插入到订单表中
INSERT INTO ‘order’(pid,cid,ocount,oprice,odate) VALUES(pid1,cid1,num,5000,date1);

//第四步,查询生成的订单ID
SELECT  o.oid
FROM ‘order’ o
where o.odate=date1;

//第五步,判断error
if(t_error=1) THEN
ROLLBACK;
ELSE 
COMMIT;
end IF;
END


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值