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

Việc gọi một thủ tục bên trong một hàm sẽ ném MySQL ERROR 1422

Có một số câu lệnh gây ra một cam kết ngầm và không câu lệnh nào trong số này có thể được sử dụng bên trong một hàm được lưu trữ hoặc một trình kích hoạt, hoặc trong một thủ tục được lưu trữ được gọi từ một hàm hoặc trình kích hoạt được lưu trữ, bởi vì điều đó không thực sự khác biệt về hiệu ứng thực của nó.

Phản ánh của khoảnh khắc giải thích lý do cho điều này:các hàm được lưu trữ (và trình kích hoạt) thực thi trong khi truy vấn đang chạy . Chúng luôn luôn, không có ngoại lệ, bắt đầu thực thi sau khi truy vấn bắt đầu và kết thúc thực thi trước khi truy vấn kết thúc. Chúng cũng có thể chạy nhiều lần trong khi thực hiện một truy vấn, đặc biệt khi truy vấn liên quan đến nhiều hàng.

Trong trường hợp đó, sẽ không hợp lý nếu có thể COMMIT một giao dịch trong khi một truy vấn đang chạy ... và đó là điều mà START TRANSACTION thực hiện, nếu một giao dịch đang chạy - nó hoàn toàn cam kết giao dịch hiện tại và bắt đầu một giao dịch mới.

Điều này là tốt trong một thủ tục được lưu trữ, miễn là bạn không gọi nó ở giữa một truy vấn khác (thông qua một hàm hoặc trình kích hoạt được lưu trữ, đó là cách duy nhất để gọi một thủ tục ở giữa một truy vấn khác) nhưng làm gì bạn đang thực hiện ở đây không được hỗ trợ ... ngay cả khi không có giao dịch nào đang chạy, vẫn không thể bắt đầu giao dịch khi đang chạy truy vấn.

http://dev.mysql.com/doc/refman /5.6/en/implicit-commit.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay vào đó, sơ đồ ER này có nên sử dụng mối quan hệ bậc ba không

  2. Làm thế nào để kiểm tra hiệu suất của truy vấn mysql?

  3. MySQL nhận vị trí hàng trong ORDER BY

  4. Bảng MySQL được đánh dấu là bị lỗi

  5. Tôi có thể chuyển đổi người dùng 'được kết nối' trong một tập lệnh sql được cung cấp bởi mysql không?