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

MySQL Trigger nhận truy vấn hiện tại khiến trình kích hoạt kích hoạt

Vấn đề ở đây là phạm vi của trình kích hoạt MySQL là cấp hàng, không phải cấp câu lệnh. Do đó, bên trong trình kích hoạt, bạn có quyền truy cập vào các giá trị CŨ và MỚI cho mỗi cột trong hàng đã cho, nhưng bạn không có quyền truy cập vào câu lệnh khiến trình kích hoạt kích hoạt.

Liên quan đến information_schema.processlist, không có gì thực sự được "lưu trữ" (vẫn tồn tại) trong chế độ xem đó. Nó chỉ là một giao diện SQL với danh sách xử lý và câu lệnh khiến trình kích hoạt kích hoạt không thể truy cập được trong phạm vi của trình kích hoạt.

Bạn đã nói rằng bạn không muốn bật nhật ký truy vấn chung và cách tiếp cận này không hoàn hảo vì nhiều lý do (bao gồm cả mức độ chi tiết của event_Time là 1 giây), nhưng đây là một ví dụ về cách bạn có thể viết lại trình kích hoạt của mình bằng cách sử dụng bảng general_log:

SET GLOBAL GENERAL_LOG='ON';
SET GLOBAL LOG_OUTPUT='TABLE';

DELIMITER || 

CREATE TRIGGER DEBUG_DATE BEFORE UPDATE ON db.tbl FOR EACH ROW 
BEGIN 
  DECLARE Q MEDIUMTEXT; 
  SELECT argument INTO Q 
  FROM mysql.general_log 
  where thread_id = connection_id() 
  order by event_time desc 
  limit 1;

  INSERT INTO db.tbl_log (INFO) 
  VALUES (Q); 

END ||

DELIMITER ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thông báo cho người dùng về sự thay đổi cơ sở dữ liệu? JavaScript / AJAX

  2. Truy vấn SQL:Xóa mục nhập không có trong bảng tham gia?

  3. Dữ liệu tải MySQL:Lệnh này chưa được hỗ trợ trong giao thức câu lệnh đã chuẩn bị

  4. PHP MySql và định vị địa lý

  5. Tôi cố gắng đưa một số thông tin từ tệp XML vào cơ sở dữ liệu SQL bằng python