Mysql
觸發器可以訪問查詢字元串嗎?
我正在考慮在 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();
試一試 !!!
如果它有效,那麼
做到這一點(皮卡德上尉會打趣回拉福格)