3 Stimmen

Problem mit SavePoint in mysql

Ich versuche, die Savepoints in MySQL zu verwenden, und es scheint, dass etwas schief geht.

MySQL-Transaktions-Rätsel

Ich erhalte eine Fehlermeldung wie unten gezeigt:

FEHLER 1305 (42000): SAVEPOINT sp_prc_work existiert nicht

Meine Verfahren mit oder ohne Speicherpunkte funktionieren genau gleich. Was ich erwartet hatte, war, dass der Wert '4', 'pqr' nicht in der Tabelle erscheinen sollte, da die gesamte Transaktion zurückgerollt wird. Aber sowohl 3 als auch 4 ID's werden eingefügt. Ich verstehe, warum der Eintrag '3', 'pqr' da ist, aber ich denke, die ID '4' sollte nicht da sein.

drop table if exists test.savepoint_test;
drop procedure if exists second_fail;
drop procedure if exists prc_work;

CREATE TABLE test.savepoint_test (
id int not null default '0',
name varchar(100),
primary key (id)
)engine=InnoDB;

insert into test.savepoint_test values ('1', 'abc');
insert into test.savepoint_test values ('2', 'xyz');

select * from test.savepoint_test;

delimiter $$

CREATE PROCEDURE second_fail()
BEGIN
        INSERT  into test.savepoint_test values ('3', 'pqr');
        INSERT  into test.savepoint_test values ('2', 'mnp');
END;

$$

CREATE PROCEDURE prc_work()
BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK TO sp_prc_work;
        SAVEPOINT sp_prc_work;
        INSERT  into test.savepoint_test values ('4', 'pqr');
        INSERT  into test.savepoint_test values ('2', 'mnp');
END;

$$

delimiter ;

call second_fail();

select * from test.savepoint_test;

call prc_work();

select * from test.savepoint_test;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X