MySQL的SQL语句里面是可以加注释的

例如:

"select * from t1"可以写成

"/* tag */select * from t1"

这个tag可以扩展成很多格式,这样在MySQL的日志中就可以看到这个tag

但是我在5.0和5.5版本中,象上面的注释,并不会显示出来,还是直接显示"select * from t1"

研究了一下,可以改成这样:

"/*!90000 tag */select * from t1"

"!"后的5位数字代表MySQL版本号,上面这个语句的意思是只有MySQL版本号大于9.0的时候,注释内容才会被执行

由于目前也没有9.0版本,所以注释内容是不会被执行的,但是在LOG日志和慢查询日志里可以看到语句中的tag注释,在show full processlist中也可以看到SQL语句中的注释tag

MySQL服务器包含一些其他SQL DBMS中不具备的扩展。注意,如果使用了它们,将无法把代码移植到其他SQL服务器。在某些情况下,你可以编写包含MySQL扩展的代码,但仍保持其可移植性,方法是用"/*... */"注释掉这些扩展。在本例中,MySQL服务器能够解析并执行注释中的代码,就像对待其他MySQL语句一样,但其他SQL服务器将忽略这些扩展。例如:

SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...

如果在字符"!"后添加了版本号,仅当MySQL的版本等于或高于指定的版本号时才会执行注释中的语法:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

这意味着,如果你的版本号为3.23.02或更高,MySQL服务器将使用TEMPORARY关键字。

5.1的Partition表的show create table的时候,也会看到如下一些注释,表示只有版本等于或大于5.1(50100表示5.1,50500表示5.5)时才支持分区语句

CREATE TABLE `log_data` (

`hap_date` date DEFAULT NULL,

`uin` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*!50100 PARTITION BY LIST (to_days(hap_date)) (PARTITION P_20080523 VALUES IN (733550) ENGINE = InnoDB) */

在mysqldump的结果文件里边也都有解释

SELECT /*!40001 SQL_NO_CACHE */ * FROM `tbMail_1`;

SQL_NO_CACHE告知MySQL不要把查询结果存储在查询缓存中