Zauważyłem, że START TRANSACTION
automatycznie COMMIT
poprzednie zapytania. Z tego powodu i faktu, że mam kilka procedur przechowywanych wywołanych przed końcem całej transakcji, muszę sprawdzić, czy jestem wewnątrz START TRANSACTION
lub nie. Czytanie instrukcji Zrozumiałem, że autocommit jest ustawiony na false wewnątrz START TRANSACTION
, ale nie wydaje się tak. Pisałem następującą procedurę:MySQL - Jak sprawdzić, czy START TRANSACTION jest aktywny
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
ale każdy show session variables like 'autocommit';
pokazu trybu automatycznego = ON, a ja spodziewałem się drugi AUTOCOMMIT = OFF.
Jak mogę sprawdzić, czy jestem w środku START TRANSACTION
?
Muszę wykonać tę kontrolę, ponieważ mam procedurę 1, która wymaga START TRANSACTION
, a następnie wywołuje procedurę2, która również potrzebuje START TRANSACTION
. Ale załóżmy, że mam trzecią procedurę different_procedure, która również musi wywoływać procedure2, ale w tym przypadku different_procedure nie używa START TRANSACTION
. W tym scenariuszu potrzebuję procedury2, aby sprawdzić, czy zainicjowano START TRANSACTION
. Mam nadzieję, że to wystarczy.
Dzięki
Dzięki, że może być rozwiązaniem, ale jest brzydki. Uważam, że powinien istnieć czysty sposób sprawdzenia, czy znajdujesz się w "transakcji początkowej". –
@Stefano Giacone Czy próbowałeś/aś SELECT @@ autocommit'? –
Tak, to jest to samo. Autocommit SET = 0; rozwiązanie jest naprawdę okropne, wolę lepsze, jeśli to możliwe ... –