Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL - Cách kiểm tra START TRANSACTION có đang hoạt động hay không

Bạn có thể tạo một quy trình sẽ khai thác lỗi chỉ có thể xảy ra trong một giao dịch:

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 ;

Kiểm tra quy trình:

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;

Kết quả:

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

Với MariaDB, bạn có thể sử dụng @@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. Chèn dữ liệu với các bảng nối

  2. Có thư viện tổng hợp kết nối mysql tiêu chuẩn cho C không?

  3. mysql.h bị thiếu .... (Ruby on Rails, OSX)

  4. Lưu nội dung tệp văn bản vào DB:Giá trị chuỗi không chính xác:'\ xEF \ xBB \ xBF # W ...' cho cột 'nội dung' ở hàng 1

  5. Nhóm theo - nhiều điều kiện - MySQL