Mysql中备份数据文件中/*!*/的含义

1.问题

在备份数据库时,我们发现生成的备份文件中,存在这样一系列代码:

/*!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 */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

那么它们究竟是注释还是什么用呢?

2.解决

参考:Mysql中 /*[叹号] */含义

2.1 /!/会被执行

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

2.2 mysql /*!50001 注释解释

在MySQL里,多行解释 是 /* /,这个是SQL的标准
但是MySQL扩张了解释的功能
假如在起头的/
后头加了惊叹号,那么此解释里的语句将被推行
比如:

mysql> /*! select * from test */;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

这里的50001表示,假如数据库是5.00.01以上版本,该语句才会被推行。
因此固然你的mysqldump出来的成立 view的语句在解释里,实际 上它是会被推行的

posted @ 2024-03-23 09:20  DawnTraveler  阅读(80)  评论(0编辑  收藏  举报