簡體   English   中英

mysql存儲過程中的事務

[英]transaction in mysql stored procedure

我想用事務寫存儲過程。 假設proc1正在事務塊中調用另一個proc(proc2)。 proc2還包含回滾/提交。 如果回滾發生在proc1中,回滾也發生在proc2中嗎? 我嘗試了以下示例,但沒有成功。 這是下面的代碼

test1.sql

DELIMITER $$
DROP PROCEDURE IF EXISTS `debug`.`test1`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test1`()

begin

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @errorOccurred :=2;

set @errorOccurred :=1;

START TRANSACTION;

insert into Table1 values("table1_1");

insert into debug values("insertStatement_1");

insert into Table1 values(1,2);

call test2();

if (@errorOccurred=2) then
ROLLBACK;
else
COMMIT;
end if;

end$$

DELIMITER ;

========================================

test2.sql

DELIMITER $$
DROP PROCEDURE IF EXISTS `debug`.`test2`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`()
begin
START TRANSACTION;

create table Table2 (msg varchar(255)) ENGINE=InnoDB;

insert into Table2 values("table2_value");

COMMIT;

end$$

DELIMITER ;

您能幫我解決我的問題嗎?

先感謝您。

這是有趣的事情:一旦運行START TRANSACTION ,任何打開的事務都會隱式提交。 我在DBA StackExchange上撰寫了有關此內容的文章: 2013年3月15日:MySQL備份InnoDB

建議 :我將刪除“ START TRANSACTION; COMMIT; 來自test2.sql。

試試看 !!!

更新2013-10-28 09:16 EDT

如果可以在事務中調用事務,則不能再次執行“ START TRANSACTION 如果要從test2回滾並從調用test2的角度將test1保留在事務中,則應考慮在MySQL文檔中使用SAVEPOINT和ROLLBACK TO SAVEPOINT

基本上,您可以在調用test2之前在test1創建SAVEPOINT 如果test2仍然失敗,則將回滾到SAVEPOINT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM