Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL ट्रिगर को वर्तमान क्वेरी मिलती है जिससे ट्रिगर आग लग जाती है

यहां मुद्दा यह है कि MySQL ट्रिगर्स का दायरा पंक्ति-स्तर है, न कि कथन-स्तर। इस प्रकार, ट्रिगर के भीतर आपके पास दी गई पंक्ति में प्रत्येक कॉलम के लिए पुराने और नए मानों तक पहुंच है, लेकिन आपके पास उस कथन तक पहुंच नहीं है जिसके कारण ट्रिगर सक्रिय हुआ।

Information_schema.processlist के संबंध में, उस दृश्य में वास्तव में कुछ भी "संग्रहीत" (जारी) नहीं है। यह प्रक्रिया सूची के लिए केवल एक SQL इंटरफ़ेस है, और ट्रिगर को सक्रिय करने वाला कथन ट्रिगर के दायरे में पहुंच योग्य नहीं है।

आपने कहा था कि आप सामान्य क्वेरी लॉग को सक्षम नहीं करना चाहते हैं, और यह दृष्टिकोण कई कारणों से सही नहीं है (इवेंट_टाइम 1 सेकंड की ग्रैन्युलैरिटी सहित), लेकिन यहां एक उदाहरण है कि आप अपने ट्रिगर का उपयोग करके फिर से कैसे लिख सकते हैं सामान्य_लॉग तालिका:

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. एक बटन क्लिक करने के बाद मोडल पॉपअप विंडो पर चयनित आईडी के आधार पर डेटा दिखाएं php mysql

  2. दो django मॉडल (टेबल) को एक मॉडल (टेबल) में कैसे मर्ज करें

  3. एडब्ल्यूएस ऑरोरा:MySQL सर्वर --read-only विकल्प के साथ चल रहा है, इसलिए यह इस कथन को निष्पादित नहीं कर सकता है

  4. Unixodbc, libmyodbc का उपयोग करके दूरस्थ mysql सर्वर से कनेक्ट करने में असमर्थ

  5. mysql अब उसी के साथ कई कॉलम अपडेट करें ()