我已经使用了很长时间的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指令 - 我可以加载转储而不分区(我猜它会被忽略)。这可能,怎么做?
答案 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或更高版本。这是一种确保转储可以在旧服务器中恢复的方法。