У меня есть небольшой скрипт в моем populate.sql, который должен откатывать все вставки в случае неудачи. Однако я не в состоянии выполнить populate.sql через «source populate.sql», потому что он говорит, что у меня есть синтаксическая ошибка в моем обработчике, но я уже проверил документы mysql 5.7, и все кажется в порядке. Что я делаю не так?
DELIMITER $$
CREATE PROCEDURE foo()
BEGIN
DECLARE rollbacka BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET rollbacka = 1;
START TRANSACTION;
insert into obra values('101-903aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa','101-903.jpeg');
insert into obra values('101-904','101-904.jpeg');
insert into obra values('101-905','101-905.jpeg');
insert into obra values('101-906','101-906.jpeg');
insert into obra values('101-907','101-907.jpeg');
IF rollbacka THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END $$
DELIMITER ;
select * from museu.obra;
[обновление] Вот что я тестирую. Он не должен обновлять таблицу obras, поскольку первый атрибут первой вставки слишком велик, поэтому он выдаст исключение, однако, когда я комментирую его, таблица остается пустой, в этом случае остальные 4 вставки должны работать.