Я пытаюсь узнать, как откатить транзакцию при ошибке. Я создал следующую хранимую процедуру, чтобы понять, как это работает.
CREATE DEFINER=`mytestlogin`@`%` PROCEDURE `insert_to_test`()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING ROLLBACK;
START TRANSACTION;
INSERT INTO test1 (FIELD) VALUES(10);
INSERT INTO test3 (FIELD) VALUES(100);
COMMIT WORK;
END
Таблица Test1 имеет два поля, а именно: ID и FIELD.
Таблица Test2 имеет два поля, а именно, ID и FIELD.
Я специально настроил запрос таблицы на test3 для сбоя. При запуске я получаю сообщение об ошибке, но транзакция отката не выполнена на test1. (Уже обновлено)
Я получаю ошибку:
19:11:35 call insert_to_test 0 row(s) affected, 1 warning(s): 1196 Some non-transactional changed tables couldn't be rolled back 0.047 sec
Ошибка не обнаруживает, что test3 также не существует.
Любая помощь приветствуется.