mysql怎么看数据库执行语句_如何查看MySQL执行了什么语句?

mysql怎么看数据库执行语句_如何查看MySQL执行了什么语句?

2023年7月20日发(作者:)

mysql怎么看数据库执⾏语句_如何查看MySQL执⾏了什么语句?先讲⼀下我们问题的背景:在使⽤⼀些ORM框架(例如hibernate mybatis等等),甚⾄在ORM框架基础上使⽤⼀些快速构建⼯具(⽐如mybatis的通⽤mapper⼯具mybatis-tk)的时候,由于我们对框架和⼯具的不熟悉,有时候在调试上就带来了很⼤的困难。ORM的特点之⼀就是对我们应⽤层开发⼈员屏蔽SQL语⾔,例如对于本来的SQL语句select * from user where id = #{id},我们开发者只需要⽤⼀个selectByPrimaryKey(int id)⽅法就可以实现。但在实际开发中,有时候我们可能会需要做⼀些错综复杂的查询,⽽不是像上例中如此简单。当我们使⽤⼀些⽅法,借助ORM来进⾏SQL语⾔拼接的时候,就时常会导致不理想的拼接结果,致使最终查询结果不对甚⾄直接报错。那么怎样解决这个问题呢?可以想到的⼀个办法,我们去研究框架or⼯具的源码,看看它内部是如何做SQL拼接的……好吧这太反⼈类了。那我们还可以采⽤⼀种迂回的⽅式,就是跳过寻找框架的SQL拼接逻辑,⽽是找出它的SQL拼接结果。那么怎么查看SQL拼接结果呢?框架和⼯具显然是没有提供这种功能的,所以我们从MySQL⼊⼿。MySQL有⼀个⽇志表,可以把历史中执⾏过哪些SQL语句存储起来。但是默认这个功能是不开启的,因为如果记录所有历史查询SQL语句的话存储量太⼤了。需要调试的时候,我们来输⼊命令开启这个功能://⽇志开启(⽇志输出到表:l_log)SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'ON';然后我们可以调⽤我们的应⽤程序,由框架或⼯具拼接SQL语句并执⾏。接下来打开我们mysql数据库中的general_log表,可以看到有这样⼀些信息。(这⾥笔者使⽤的是navicat可视化⼯具。⽤命令⾏来查看也不影响)我们看argument字段,点击⼀下,并单击“备注”,可以看到具体执⾏的SQL语句。在这⾥,其实也就可以找到我们的SQL拼接结果。有了结果,再回过头去检查我们的应⽤层代码是不是要做出⼀些修改,就能顺利许多。最后,在调试结束后别忘记关掉这个⽇志功能,不然信息量太⼤:SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF';再补充⼀个⼩tip,如果你要清空general_log的话,要⽤以下语句:truncate table l_log;这是因为在我们的⽇志表中不能加锁,⽽delete操作是需要加锁的,所以只能使⽤truncate。(当然如果你硬要修改事务隔离级别也可以)

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689826763a289027.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信