ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MySQL 条件注释 vs 普通注释

MySQL 条件注释 vs 普通注释 普通注释MySQL完全忽略不会执行条件注释特定版本/环境下会被解析执行其他情况当作注释忽略1. 普通注释纯注释永远不执行两种写法-- 单行注释--后面要有空格# 单行注释/* 多行注释 这里面所有SQL都会被MySQL直接忽略无论版本 */✅ 特点所有MySQL版本行为一致仅用于写说明文档不会执行里面任何SQL导出、导入SQL脚本注释内容保留但不会生效2. 条件注释MySQL专属有条件执行语法/*! 版本号 SQL语句 */-- 大于等于5.7.20版本才执行低版本直接当成注释/*!50720 CREATE INDEX idx_name ON t(name); *//*!开启条件注释50720 5.7.20主版本10000 次版本100 修订号*/结束标记还有反向写法/*!80000 语句 */8.0以上执行还有跨库兼容写法/*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */;mysqldump导出脚本大量使用。✅ 特点条件生效满足版本条件 → 内部SQL执行不满足 → 当成普通注释跳过其他数据库Oracle、PostgreSQL看到/*!xxx ... */直接识别为普通注释不会执行用来做跨库兼容mysqldump 大量使用这个特性3. 核心区别汇总表对比项普通注释MySQL条件注释语法--#/* *//*!版本号 sql */是否执行永远不执行版本匹配 → 执行不匹配 → 不执行用途代码备注、临时屏蔽SQL跨版本兼容、mysqldump脚本、跨数据库兼容其他数据库全部识别为注释其他数据库识别为普通注释不会执行里面SQL风险无风险有风险版本匹配时SQL会运行容易踩坑4. 实战例子对比-- 普通注释下面这条建索引永远不会执行/* CREATE INDEX idx_test ON user(name); */-- 条件注释MySQL 8.0.12 就会执行建索引低于该版本忽略/*!80012 CREATE INDEX idx_test ON user(name); */5. 博客补充小坑很多人踩坑直接复制mysqldump导出SQL以为/*!xxx */是注释直接删掉或者误以为里面代码永远不跑条件注释不是单纯备注是可执行的SQL
返回列表