我正在考虑使用触发器作为MySQL中的日志记录机制(v.5.1),因此我希望我的触发器获取查询字符串以便将其存储在另一个tabe中.
我在MySQL文档中找不到类似的东西,所以我希望答案是否定的 – 但我仍然希望我忽略了一些东西.
解决方法:
我有一个工作理论(LaForge会对Capt Picard说)……
您还可以访问运行触发器的当前进程的ID.获取该进程ID的功能是CONNECTION_ID.
您可以尝试删除这样的查询:
SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID();
请记住,信息是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();
试试看 !!!
如果它有效,那么
这样做(Capt Picard会回到LaForge)
标签:mysql,trigger
来源: https://codeday.me/bug/20190806/1594687.html