mariadb 玛丽亚数据库/MySQL:回滚在过程中不起作用[重复]

zrfyljdw  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(117)

此问题在此处已有答案

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中删除该记录。我想回滚并撤消删除操作。我在这里遗漏了什么?

zzlelutf

zzlelutf1#

START TRANSACTIONROLLBACK出现在错误的位置。您应该在异常处理程序中回滚,并在过程的主体中启动事务。

create or replace procedure move_animals(in diernaam varchar(25)) 
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
        ROLLBACK;

    START TRANSACTION;
    insert into moved_animals(naam)
        values(diernaam);   
    delete from animals 
        where naam in (diernaam);
    COMMIT;
end;

相关问题