Mysql斜线星号爆炸

时间:2015-05-22 22:34:09

标签: mysql sql special-characters

我刚刚意识到sql文件中有一些行(.sql),它们以/*!开头并且不是注释,而是执行它们来执行一些系统级任务。

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

以下是示例:

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

修改 根据{{​​3}},我不认为这个问题是重复的。这个问题是关于MySQL如何对待它的。它没有询问如何删除这些注释,并且该问题并未将其视为对MySQL的评论。

1 个答案:

答案 0 :(得分:13)

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

这将在SQL文件中启用MySQL特定的关键字或语法,而不会破坏其他系统。

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

有关详细信息,请查看the docs

  

MySQL Server支持一些C风格的评论变体。这些启用   你编写包含MySQL扩展的代码,但仍然是   便携式,使用以下形式的评论:

/*! MySQL-specific code */
     

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

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