下面是一个存储过程的基本用法,以及存储过程中使用事务,防止数据混乱,保持数据一致性

下面这个存储过程主要涉及的几个知识部分:

1、动态拼装表名称

2、在存储过程内容获取查询结果并赋值给一个新属性

3、if else判断

用到的数据表

mysql 存储过程中事务处理 mysql存储过程事务控制_存储过程


mysql 存储过程中事务处理 mysql存储过程事务控制_sql_02


创建存储过程:

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,代表执行失败,事务回滚

mysql 存储过程中事务处理 mysql存储过程事务控制_存储过程_03