sql >> Databasteknik >  >> RDS >> Mysql

MySQL Trigger får aktuell fråga som fick utlösaren att aktiveras

Problemet här är att omfattningen av MySQL-utlösare är radnivå, inte uttalandenivå. Som sådan har du inom triggern åtkomst till GAMLA och NYA värden för varje kolumn i den givna raden, men du har inte åtkomst till uttalandet som fick utlösaren att aktiveras.

När det gäller information_schema.processlist är ingenting faktiskt "lagrat" (bevarat) i den vyn. Det är bara ett SQL-gränssnitt till processlistan, och satsen som fick utlösaren att aktiveras är inte tillgänglig inom utlösarens omfång.

Du sa att du inte vill aktivera den allmänna frågeloggen, och det här tillvägagångssättet är inte perfekt av flera anledningar (inklusive granulariteten för event_Time är 1 sekund), men här är ett exempel på hur du kan skriva om din trigger med hjälp av generell_loggtabell:

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. För varje av TVÅ loopande textfält, möjligt?

  2. Hur får jag den primära nyckeln/nycklarna till en tabell från Postgres via plpgsql?

  3. Slå ned väggarna! Hur du tar bort dina data

  4. Hur TRIM_ORACLE() fungerar i MariaDB