Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Trigger получава текуща заявка, която е причинила задействане на тригера

Проблемът тук е, че обхватът на тригерите на MySQL е на ниво ред, а не на ниво израз. Като такъв, в рамките на тригера имате достъп до СТАРИ и НОВИ стойности за всяка колона в дадения ред, но нямате достъп до израза, който е причинил задействането на тригера.

По отношение на information_schema.processlist нищо всъщност не се "съхранява" (запазва) в този изглед. Това е просто SQL интерфейс към списъка с процеси и операторът, който е причинил задействането на тригера, не е достъпен в рамките на обхвата на тригера.

Казахте, че не искате да активирате общия регистър на заявките и този подход не е перфектен поради множество причини (включително детайлността на event_Time, която е 1 секунда), но ето пример за това как можете да пренапишете вашия тригер, като използвате таблица 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. Грешка MySQLdb не може да инициализира набор от знаци utf-8

  2. Как мога да видя на живо MySQL заявки?

  3. Изходът за експортиране на заявка на MySQL от командния ред във файл не работи в Windows

  4. Как работи функцията TRIM() в MySQL

  5. Сблъсък на MySQL конектор и VC2010 заглавка