mysql存储过程以及执行事务

下面是一个存储过程的基本用法,以及存储过程中使用事务,防止数据混乱,保持数据一致性
下面这个存储过程主要涉及的几个知识部分:
1、动态拼装表名称
2、在存储过程内容获取查询结果并赋值给一个新属性
3、if else判断
用到的数据表
在这里插入图片描述
在这里插入图片描述
创建存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_student_info`(IN fromName VARCHAR(50),IN id INT(32),out error int)
BEGIN
	DECLARE updateSql VARCHAR(200);
	DECLARE t_error INTEGER DEFAULT 0;
  #捕获到sql的错误,就设置t_error为1
 	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
   #开启事务
	START TRANSACTION;


  set @sqlStr=CONCAT('SELECT stu_sex INTO  @tempSex FROM ',fromName,' where id=',id);
  PREPARE  stmt from @sqlStr;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
  #获取查询参数值
  if @tempSex ='男'  then
		set updateSql=CONCAT("UPDATE ",fromName," set score=80 where id=",id);
  ELSE
		set updateSql=CONCAT("UPDATE ",fromName," set score=86 where id=",id);
	end if;
 # 更改学生成绩
  set @sqlUpdate=updateSql;
  PREPARE  stmt from @sqlUpdate;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
  #下面这行是我写的一个错误查询,如果把它注释打开,那么事务就会执行回滚,这里主要用于事务是否有效
  #SELECT * from student1;
  #如果捕获到错误
   IF t_error=1 THEN
         #回滚
 	set error=1;
        ROLLBACK;
     ELSE
         #提交
 	 set error=0;
         COMMIT;
     END IF;
     SELECT error;
END

执行存储过程:

call update_student_info('student',3,@error);

输出error结果为0,代表正常执行成功;如果error为1,代表执行失败,事务回滚
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值