论坛首页 综合技术论坛

MYSQL5.0,存储过程事务问题求解

浏览 1578 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-23  
有A、B、C3个存储过程,B和C分别一前一后被A调用。当B或者C出错的时候,通过返回值可以让A里面的事务回滚。但是如果C出错,怎么样让B里面的事务也回滚呢?

也就是说,如何让A、B、C在同一个事务里面?
望高人求解。
   发表时间:2010-10-23  
自己测试了一下。
B的语句如下:

CREATE PROCEDURE prestashop.p_test_b(
  OUT out_sqlcode int)
BEGIN
-- START TRANSACTION;
  SET out_sqlcode = 0;

INSERT INTO testupdate_will_be_deleted(id, name)
    VALUES(2,'B');

--  COMMIT;

INSERT INTO testupdate_will_be_deleted(id, name)
    VALUES(2,'BB');

--  SET out_sqlcode = 9999;
--  commit;
END

A是如下调用B的

CREATE PROCEDURE prestashop.p_test_a(
  OUT out_sqlcode int)
main:BEGIN
START TRANSACTION;
CALL p_test_b(out_sqlcode);

    IF out_sqlcode > 0 THEN
      rollback;
      LEAVE main;
    END IF;

--     CALL p_test_c(out_sqlcode);
--
--     IF out_sqlcode > 0 THEN
--       rollback;
--       LEAVE main;
--     END IF;

COMMIT;
END

运行结果是正常回滚,表[testupdate_will_be_deleted]里面没有数据被插入。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics