Почему транзакция mySQL не может откатиться при ошибке? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь узнать, как откатить транзакцию при ошибке. Я создал следующую хранимую процедуру, чтобы понять, как это работает.

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 также не существует.

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...