在MySQL的SQL语句或SQL文件经常看到如下用户:
SELECT /*!40001 SQL_CACHE */ * FROM pre_common_syscache WHERE cname IN ('ipbanned')/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;请问其中/*!代码 ……*/代表什么意思?可以用于哪些地方?我在MySQL手册中没有看到具体讲解。
谢谢

解决方案 »

  1.   

    这只是一个hint啊。
    40001 SQL_CACHE, 意味着数据库要缓存整个SQL语句。还有SQL_NO_CACHE的hint
      

  2.   

    你可以用下面语句做下试验
    show status like 'qcache_%'
    select /*!40001  SQL_CACHE */ * FROM tb 
    select /*!40001  SQL_no_CACHE */ * FROM tb 效果和不加/*!..*/一样 
    select  SQL_CACHE  * FROM tb 
    select SQL_no_CACHE  * FROM tb 
    还有相关变量
    变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。 
      

  3.   

    /* ....  */ 在大部分语言中都一样是注释。这个之中的语句是不被执行的。但MYSQL中 为了保持兼容,比如从mysqldump 导出的SQL语句能被其它数据库直接使用,它把一些特有的仅在MYSQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中它会执行。
      

  4.   

    MySQL Server supports some variants of C-style comments. These enable you to write code that includes MySQL extensions, but is still portable, by using comments of the following form: /*! MySQL-specific code */
      

  5.   

    手册上:
    但MYSQL中 为了保持兼容标准SQL,MYSQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中它会执行在其他数据库中 /*! ... */就是注释