使用mysqldump注释指令

时间:2014-05-12 07:33:45

标签: mysql mysqldump directive

我已经使用了很长时间的mysql,但是并没有真正研究它的一个特性 - 转储中的指令。我目前正在进行分区工作,所以让我们举一个例子,让我们看看http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html中的代码:

show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `dt` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE (to_seconds(dt))
(PARTITION p01 VALUES LESS THAN (63426787200) ENGINE = MyISAM,
 PARTITION p02 VALUES LESS THAN (63426816000) ENGINE = MyISAM,
 PARTITION p03 VALUES LESS THAN (63426844800) ENGINE = MyISAM,
 PARTITION p04 VALUES LESS THAN (63426873600) ENGINE = MyISAM,
 PARTITION p05 VALUES LESS THAN (63426902400) ENGINE = MyISAM,
 PARTITION p06 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */

我感兴趣的是/*!50500 [...] */。它是什么以及它是如何工作的?在解析转储文件时,我认为它是mysql的一种指令。至于指令,我想它可以打开或关闭。那将是很酷的 - 我可以有一个分区表的数据库转储和 - 当关闭50500指令 - 我可以加载转储而不分区(我猜它会被忽略)。这可能,怎么做?

1 个答案:

答案 0 :(得分:5)

它既不是mysqldump功能也不是指令代码或名称。它很老MySQL conditional comments

  

如果在“!”字符后添加版本号,则为语法   仅当MySQL版本更大时,才会执行注释   大于或等于指定的版本号。 TEMPORARY关键字   以下注释仅由MySQL的服务器执行   3.23.02或更高:

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

刚才描述的注释语法适用于mysqld服务器   解析SQL语句。 mysql客户端程序也执行一些   在将语句发送到服务器之前解析语句。 (这样做   确定多语句输入中的语句边界   线。)

     

此格式的评论,/ *!12345 ... * /,未存储在   服务器。如果这种格式用于评论存储的例程,那么   评论不会保留在服务器上。

因此50500代表 MySQL 5.5.0或更高版本。这是一种确保转储可以在旧服务器中恢复的方法。