gpt4 book ai didi

mysql - 寻找触发语句

转载 作者:行者123 更新时间:2023-11-29 03:19:29 26 4
gpt4 key购买 nike

我想在MySQL中写一个触发器,它会记录下导致触发器触发的语句。我知道如何在 Oracle 中执行此操作:

n := ora_sql_txt(sql_text);
for i in 1..n loop
stmt := stmt || sql_text(i);
end loop;

但我在 MySQL 中找不到等效项。

最佳答案

导致触发触发器的语句的 SQL 文本可能在 information_schema 数据库的 processlist 表中可用。

例如也许是这样的(未测试)

DECLARE ls_pl_info VARCHAR(65536);

SELECT pl.info
INTO ls_pl_info
FROM information_schema.processlist pl
WHERE pl.id = CONNECTION_ID() ;

-或者也许-

SELECT t.processlist_info
INTO ls_pl_info
FROM performance_schema.threads t
WHERE t.processlist_id = CONNECTION_ID() ;

(我不确定也没有测试的是,信息列是否包含触发触发器的语句的 SQL 文本,或者它是否会显示当前 语句,它正在访问 processlist 表。)

但那是我能想到的最接近的;我认为导致触发器触发的语句文本在触发器中不可用。

引用资料:

https://dev.mysql.com/doc/refman/5.7/en/processlist-table.html

https://dev.mysql.com/doc/refman/5.7/en/thread-information.html

注意:如果启用general_log(我们的系统通常不启用它;我们通常只是临时启用它以收集一小段时间的信息...)但我不认为触发语句将在通用日志中可用,直到它完成后,这意味着触发的触发器完成后。

另一个选项是二进制日志(如果启用了二进制日志)。但是从触发器内部获取它似乎过于复杂。

关于mysql - 寻找触发语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com