ここでの問題は、MySQLトリガーのスコープがステートメントレベルではなく行レベルであるということです。そのため、トリガー内では、指定された行の各列のOLD値とNEW値にアクセスできますが、トリガーを起動する原因となったステートメントにはアクセスできません。
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 ;