[英]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。
試試看 !!!
如果可以在事務中調用事務,則不能再次執行“ START TRANSACTION
。 如果要從test2
回滾並從調用test2
的角度將test1
保留在事務中,則應考慮在MySQL文檔中使用SAVEPOINT和ROLLBACK TO SAVEPOINT 。
基本上,您可以在調用test2
之前在test1
創建SAVEPOINT 。 如果test2
仍然失敗,則將回滾到SAVEPOINT 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.