注释有几种写法
SQL 注释主要有三类:-- 单行注释与 /* */ 块注释是 MySQL 与 PostgreSQL 通用的标准形式;MySQL 另外支持 # 作为单行注释,以及 /*! ... */ 这种「可执行注释」——满足版本条件时里面的内容会被真正执行。此外 /*+ ... */ 形式的优化器提示语法上像注释,实际会影响执行计划。
基本信息
| 标准单行 | -- 后必须跟空白(空格或制表符)才算注释 |
|---|---|
| 块注释 | /* */ 可跨行 |
| MySQL 扩展 | # 单行注释;/*! ... */ 内容会被执行 |
| 优化器提示 | /*+ ... */,MySQL 8.0 原生支持,PostgreSQL 需扩展 |
| 作用 | 注释本身不参与执行,提示是唯一例外 |
典型使用场景
- 给复杂 SQL 分段加说明,便于交接与复查
- 调试时临时注释掉一段条件,观察结果变化
- 迁移工具用可执行注释携带版本化的初始化命令
- 用优化器提示引导执行计划做对比实验
- 在视图与存储过程定义里留下维护说明
基本写法
基本写法
-- 单行注释:标准写法,MySQL 与 PostgreSQL 都支持
# MySQL 独有的单行注释
/* 跨行
注释 */
SELECT 1; -- 行尾注释同样有效可执行注释与提示
可执行注释与提示
-- MySQL 可执行注释:按版本号条件执行,迁移工具常用
/*!40101 SET NAMES utf8mb4 */;
-- 优化器提示:语法像注释,实际会影响执行计划
SELECT /*+ MAX_EXECUTION_TIME(1000) */ COUNT(*) FROM orders; -- MySQL 8.0
SELECT /*+ IndexScan(orders idx_orders_created) */ * FROM orders; -- PG 需 pg_hint_plan 扩展注释形式对照
| 写法 | MySQL | PostgreSQL | 说明 |
|---|---|---|---|
| -- 单行 | 支持(后需空白) | 支持 | 标准形式 |
| # 单行 | 支持 | 不支持 | MySQL 扩展 |
| /* */ 块 | 支持 | 支持 | 可跨行 |
| /*! */ | 支持且会执行 | 不支持 | 版本化可执行注释 |
| /*+ */ | 8.0 原生提示 | 需装扩展 | 优化器提示 |
MySQL 的 -- 后面必须有空白:写成 --注释(连在一起)不构成注释,语句会直接报语法错误。这一点是从其他数据库迁移过来时最容易踩的坑。
/*! */ 里的内容在满足版本条件时真的会执行:从备份或迁移工具里复制语句时要单独核对,别把它当成普通注释忽略过去。