我打算执行多次指挥,以更新客户数据库,但我希望该指挥部在一次交易中执行,如果在一次指挥中发生错误,所有变动都将得到支持。
当我以这个例子来管理该守则时,如果存在试验2表,则退缩没有奏效,插入的行文存在于测试表中。
What am I doing wrong?
MySQL server is 5.1. the engine of tables is Innodb.
守则实例:
set autocommit = 0;
drop procedure if EXISTS rollbacktest;
delimiter //
CREATE PROCEDURE rollbacktest ()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING SET @x2 = 4;
SET autocommit = 0;
start transaction;
SET @x2 = 0;
insert into test(t)values (800);
CREATE TABLE `test2` (
`t` int(11) UNSIGNED NOT NULL
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci ;
if @x2 = 4 THEN ROLLBACK; else commit; end if;
END;
//
CALL rollbacktest()