此问题在此处已有答案:
MySQL : transaction within a stored procedure(4个答案)
两个月前关门了。
我正在尝试创建一个包含具有回滚的事务的过程:
create or replace procedure move_animals(in diernaam varchar(25))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
START TRANSACTION;
BEGIN
ROLLBACK;
end;
insert into moved_animals(naam)
values(diernaam);
delete from animals
where naam in (diernaam);
COMMIT;
end;
call move_animals("giraf");
但是,当我在表moved_animals
上执行插入操作时,由于唯一约束,这是不可能的,它仍然会从animal
中删除该记录。我想回滚并撤消删除操作。我在这里遗漏了什么?
1条答案
按热度按时间zzlelutf1#
START TRANSACTION
和ROLLBACK
出现在错误的位置。您应该在异常处理程序中回滚,并在过程的主体中启动事务。