我在populate.sql中有一个小脚本,它应该在任何插入失败时回滚所有插入。不过,我不能通过“source populate.sql”执行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,因为第一个insert的first属性太大,所以它会抛出一个异常,但是当我注解它时,表仍然是空的,在这种情况下,其他4个insert应该可以工作。
暂无答案!
目前还没有任何答案,快来回答吧!