I am trying to use savepoints in MySQL and it seems like something is going wrong.
MySQL Transaction Protocol
I get an error as shown below:
ERROR 1305 (42000): SAVEPOINT sp_prc_work does not exist
My procedures with or without savepoints work exactly the same. I expected the value "4", "pqr" should not appear in the table, as the whole transaction will be rejected. But both, 3 and 4 identifiers are inserted. I understand why there is an entry "3", "pqr", but I think that the identifier "4" should not be there.
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;
source
share