Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Jak sprawdzić, czy START TRANSAKCJI jest aktywny

Możesz stworzyć procedurę, która wykorzysta błąd, który może wystąpić tylko w ramach transakcji:

DELIMITER //
CREATE PROCEDURE `is_in_transaction`(OUT $transaction bool)
BEGIN
    DECLARE oldIsolation TEXT DEFAULT @@TRANSACTION_ISOLATION;
    DECLARE EXIT HANDLER FOR 1568 BEGIN
        -- error 1568 will only be thrown within a transaction
        SET $transaction = true;
    END;
    -- will throw an error if we are within a transaction
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    -- no error was thrown - we are not within a transaction
    SET TRANSACTION_ISOLATION = oldIsolation;
    SET $transaction = false;
END//
DELIMITER ;

Przetestuj procedurę:

set @within_transaction := null;
set @out_of_transaction := null;

begin;
    CALL is_in_transaction(@within_transaction);
commit;

CALL is_in_transaction(@out_of_transaction);

select @within_transaction, @out_of_transaction;

Wynik:

@within_transaction | @out_of_transaction
--------------------|--------------------
                  1 |                   0

Z MariaDB możesz użyć @@in_transaction



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Suma, średnia, maksymalna, minimalna, liczba wartości NULL

  2. Jak zabezpieczyć klaster Galera — 8 wskazówek

  3. Zapytanie SQL o co najmniej jedno z czegoś

  4. Jak wziąć mysqldump z UTF8?

  5. Jak ustawić zestawienie w mysqli?