我正在尝试学习如何在出错时回滚事务。我创建了以下storedProcedure,以了解其工作原理。
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也不存在。
感谢您的帮助。