如何在MySQL查询中添加注释以在日志中显示?

9

我希望能在每个查询的开头添加一个小注释,这样当我在进程列表或“mytop”中看到它时,就能知道它在哪里运行。

这样的操作是否可行?

2个回答

8

我不确定这个方法是否有效,但值得尝试。

只需在正常发送的任何SQL查询之前添加"/* some comment or tag */ "即可。

可能MySQL服务器会将此注释作为其查询分析/准备的一部分删除,但也可能会保留它,因此在日志和其他监视工具中显示为这样。

如果注释被剥离,并且假设是SELECT查询,则可以对上述内容进行轻微变化,将计算列作为SELECT后的第一件事添加,例如

SELECT IF('some comment/tag' = '', 1, 0) AS BogusMarker, here-start-the-original-select-list
-- or
SELECT 'some [short] comment/tag' AS QueryID, here-start-the-original-select-list

这种方法的缺点是会在每个结果行中引入一个额外的列值。实际上,后一种形式使用“注释/标记”值作为该值,这可能有助于调试。

你可以这样做:SELECT IF('owner' = 'joe', 'additional comment', original_first_column),以避免额外的列。 - Tgr
1
值得一提的是,MySQL服务器不会剥离注释,但是mysql命令行客户端会这样做。 - Bill Karwin

3
我今天发现了这个:
MySQL支持以下奇怪的语法:
/*!<min-version> code here */

为了嵌入只由MySQL解释的代码,而且仅适用于指定最低版本的MySQL。

这在文档 9.7 Comments 中有详细记录(例如mysqldump中使用)。

这些注释不会被解析,并且不像普通注释那样包含在进程列表中,即使代码实际上没有被执行。

因此你可以这样做:

/*!999999 comment goes here */ select foo from bla;

为了在进程列表中显示注释,但不改变代码。(直到MySQL开发人员决定膨胀其版本号并发布一个编号超过99.99.99的版本,在这种情况下,您将只需添加另一个数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接