Mysql

觸發器可以訪問查詢字元串嗎?

  • December 20, 2021

我正在考慮在 MySQL (v. 5.1) 中使用觸發器作為日誌記錄機制,因此我希望我的觸發器獲取查詢字元串以便將其儲存在另一個表中。

我在 MySQL 文件中找不到類似的東西,所以我希望答案是否定的——但我仍然希望我忽略了一些東西。

PS:這個問題與IcarusNM 對我的問題“Log MySQL DB changed queries and users”的回答有關

我有一個可行的理論(LaForge 會對 Capt Picard 說)。..

由於您使用的是 MySQL 5.1,因此您可以訪問表INFORMATION_SCHEMA.PROCESSLIST

您還可以訪問觸發器正在執行的目前程序的 ID。獲取該程序 ID 的函式是CONNECTION_ID

您可以嘗試像這樣找出查詢:

SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID();

請記住,info是 LONGTEXT:

mysql> show create table information_schema.processlist\G
*************************** 1. row ***************************
      Table: PROCESSLIST
Create Table: CREATE TEMPORARY TABLE `PROCESSLIST` (
 `ID` bigint(4) NOT NULL DEFAULT '0',
 `USER` varchar(16) NOT NULL DEFAULT '',
 `HOST` varchar(64) NOT NULL DEFAULT '',
 `DB` varchar(64) DEFAULT NULL,
 `COMMAND` varchar(16) NOT NULL DEFAULT '',
 `TIME` int(7) NOT NULL DEFAULT '0',
 `STATE` varchar(64) DEFAULT NULL,
 `INFO` longtext
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

在觸發器中,您可以使用局部變數來保存查詢

DECLARE original_query VARCHAR(1024);

然後擷取查詢

SELECT info INTO original_query FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID();

試一試 !!!

如果它有效,那麼

做到這一點(皮卡德上尉會打趣回拉福格)

引用自:https://dba.stackexchange.com/questions/8108