2015-05-22 58 views
7

我刚刚意识到在sql文件(.sql)中有一行以/*!开头,并且不是注释,它们被执行以执行一些系统级别的任务。Mysql斜杠星号砰

我想知道以/*!开头的行对MySQL的真正含义,以及为什么在符号旁边使用该数字(在我的示例中为4000)。

这里是例子:

/*!40000 ALTER TABLE `my_table` DISABLE KEYS */; 
INSERT INTO my_table VALUES ('value1','value2'); 
/*!40000 ALTER TABLE `my_table` ENABLE KEYS */; 

编辑: 我不认为这个问题是一个重复的按了linked question。这个问题是关于MySQL如何对待它的。它没有询问如何删除这些评论,并且这个问题没有把它看作是对MySQL的评论。

+1

按照[文档注释](https://dev.mysql.com/doc /refman/5.1/en/comments.html),此语法指示*特定于MySQL的代码,*旨在仅由MySQL执行,而不是其他SQL关系数据库管理器。 –

+0

@ Ollie-Jones:我不认为这个问题根据链接问题是重复的。它没有询问如何删除这些评论,并且这个问题没有把它看作是对MySQL的评论。 – PCM

回答

9

这些行被任何其他MySQL的RDBMS视为注释。但MySQL会执行它们。

这使得SQL文件中的特定关键字或语法不会被其他系统破坏。

该数字表示您定位的版本,例如, /*!32302 TEMPORARY */只能由MySQL版本3.23.02或更高版本执行。

看一看the docs更多信息:

MySQL服务器支持的C风格的注释一些变种。这些使 你编写代码,包括MySQL的扩展,但仍然是 便携,使用以下格式的注释:

/*! MySQL-specific code */ 

在这种情况下,MySQL服务器解析和 ,因为它在注释中执行代码会有任何其他SQL 语句,但其他SQL服务器将忽略扩展。对于 例如,MySQL服务器识别出 以下语句STRAIGHT_JOIN关键字,但其他的服务器将不会:

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