Ho notato che START TRANSACTION
automaticamente COMMIT
le query precedenti. Per questo motivo e per il fatto che ho diverse procedure memorizzate chiamate prima della fine dell'intera transazione, devo verificare se sono all'interno di uno START TRANSACTION
o no. Leggendo il manuale ho capito che l'autocommit è impostato su false all'interno di un START TRANSACTION
, ma non sembra così. Ho scritto la seguente procedura:MySQL - Come verificare se START TRANSACTION è attivo
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_transaction`()
BEGIN
show session variables like 'autocommit';
start transaction;
show session variables like 'autocommit';
COMMIT;
show session variables like 'autocommit';
END
Ma ogni show session variables like 'autocommit';
spettacolo autocommit = ON mentre mi aspettavo il secondo ad essere autocommit = OFF.
Come posso verificare se sono all'interno di un START TRANSACTION
?
Ho bisogno di eseguire questo controllo perché ho procedura1 che ha bisogno di START TRANSACTION
quindi chiama procedura2 che anche bisogno di START TRANSACTION
. Ma supponiamo di avere una terza procedura different_procedure che deve anche chiamare procedure2 ma in questo caso different_procedure non usa START TRANSACTION
. In questo scenario ho bisogno della procedura2 per verificare se è stato avviato START TRANSACTION
. Spero che questo sia abbastanza chiaro.
Grazie
Grazie, che può essere una soluzione, ma è brutto. Credo che ci dovrebbe essere un modo pulito per verificare se ci si trova all'interno di una "transazione iniziale" –
@Stefano Giacone Hai provato 'SELECT @@ autocommit'? –
Sì, è lo stesso. L'autocommit SET = 0; soluzione è davvero terribile, preferisco una migliore se possibile ... –