Non riesco a trovare un modo ottimale per utilizzare le transazioni in una stored procedure MySql. Voglio ROLLBACK
se qualcosa non riesce:MySql stored procedure, transazioni e rollback
BEGIN
SET autocommit=0;
START TRANSACTION;
DELETE FROM customers;
INSERT INTO customers VALUES(100);
INSERT INTO customers VALUES('wrong type');
COMMIT;
END
1) Is autocommit=0
richiesto?
2) Se il secondo INSERT
interrompe (e lo fa ovviamente) il primo INSERT
non viene ripristinato. La procedura continua semplicemente fino al COMMIT
. Come posso evitare questo?
3) Ho trovato che posso DECLARE HANDLER
, dovrei usare questa istruzione o c'è un modo più semplice per dire che se qualche comando fallisce, la procedura memorizzata dovrebbe ROLLBACK
e fallire anche tu?
DECLARE HANDLER
funziona correttamente, ma poiché ho MySql versione 5.1 non è possibile utilizzare RESIGNAL
. Quindi, se si verifica un errore, il chiamante non sarà notificato:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
-- RESIGNAL; not in my version :(
END;
START TRANSACTION;