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


你可能感兴趣的:(mysql基础)