使用代码对数据库的某些操作(比如:使用 Java 的 ORM 框架操作数据库)
报出语法错误,但是代码并没有记录 SQL 语句文本的功能,在 MySQL 数据库层 能否查看到具体的 SQL 语句文本,看看是否哪里写错了?这个时候,大多数人首 先想到的就是去查看错误日志。很遗憾,对于 SQL 语句的语法错误,错误日志并 不会记录。
实际上,在 performanceschema 的语句事件记录表中针对每一条语句的执 行状态都记录了较为详细的信息,例如:events_statements表和 eventsstatements_summary_by_digest 表(events_statements表记录了语句所有 的执行错误信息,而 events_statements_summary_by_digest 表只记录了语句在执 行过程中发生错误的语句记录统计信息,不记录具体的错误类型,例如:不记录 语法错误类的信息)。下面看看如何使用这两个表查询语句发生错误的语句信息。
首先,我们模拟一条语法错误的 SQL 语句,使用 events_statements_history_long 表或者 events_statements_history 表查询发生语 法错误的 SQL 语句: select & from;
然后,查询 events_statements_history 表中错误号为 1064 的记录 select * from events_statements_history where mysql_errno=1064\G
不知道错误号是多少,可以查询发生错误次数不为 0 的语句记录,在里边找 到 SQL_TEXT 和 MESSAGE_TEXT 字段(提示信息为语法错误的就是它)。