Я хочу выполнить несколько команд для обновления базы данных клиентов, но я хочу, чтобы эта команда выполнялась в транзакции, и при возникновении ошибки в одной команде все изменения будут откатываться назад.
Когда я запускаю код в этом примере, если таблица test2 существовала, откат не сработал, и вставленная строка существует в тестовой таблице.
Что я делаю не так?
Сервер MySQL 5.1.
двигатель таблиц 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()