基础格式
sql
/*! SQL语句 */
- 开头:
/*!(斜杠 + 星号 + 感叹号) - 结尾:
*/(星号 + 斜杠)
区别普通注释
/* 内容 */,感叹号是关键
✅ 规则:
- MySQL:会执行
/*!和*/里面的SQL - PostgreSQL / Oracle / SQL Server:当作普通多行注释,直接忽略不执行
带版本号(最常用)
sql
/*!版本号 SQL语句 */
版本号规则:主版本 * 10000 + 次版本 * 100 + 修订号
只有当前MySQL版本 >= 指定版本号,内部SQL才执行
示例:
sql
/*!40101 SET NAMES utf8mb4 */;
40101 → MySQL 4.1.01,版本≥4.1.01才执行。
常用版本对照:
- 5.7.34 →
50734 - 8.0.30 →
80030
拓展:/*!Mysql 关键字(较少见)
sql
/*!Mysql SQL语句 */
效果等同于 /*! SQL */,只是显式标注是MySQL专属语法,mysqldump很少用。
⚠️ 还有一种:! 反向注释(*/!)
sql
/*! SQL语句 */
含义:非MySQL数据库才执行,MySQL忽略,日常几乎不用。
快速对比
| 写法 | MySQL行为 | 其他数据库 |
|---|---|---|
/* 内容 */ |
注释,不执行 | 注释,不执行 |
/*! 内容 */ |
执行内部SQL | 注释,不执行 |
/*!80000 内容 */ |
版本≥8.0.00才执行 | 注释,不执行 |
/*! 内容 */ |
注释,不执行 | 执行内部SQL |
示例
sql
-- 基础条件注释
/*! CREATE TABLE IF NOT EXISTS t1(id INT) */;
-- 版本控制:MySQL8.0及以上才执行
/*!80000 ALTER TABLE t1 ADD COLUMN name VARCHAR(32) */;
注意点
- 版本号不能加小数点,必须是连续数字;
- 内部SQL语法错误,满足版本条件时MySQL照样报语法错误;
- 结束标记一定是
*/,不要漏写。