在 MySQL 中,SQL 语句注释用于在 SQL 代码中添加说明、提醒或临时禁用某部分代码,而不会被 MySQL 执行。注释对于代码的可读性、维护性以及调试都非常有帮助。
MySQL 提供了 三种主要类型的注释方式:
#开头#开始,到该行结束# 这是一个单行注释(MySQL风格)
SELECT * FROM users;✅ 推荐在 MySQL 命令行、脚本、存储过程中广泛使用
--(双横线 + 空格)--开始,后面必须跟至少一个空格,然后是注释内容-- 这也是一个单行注释(标准SQL风格,注意空格)
SELECT * FROM products;⚠️ 注意:
--后面必须有一个空格,否则可能不会被识别为注释(某些客户端可能不严格要求,但最好加上)
/*开始注释,*/结束注释/*
这是一个多行注释(块注释),
可以写多行内容,
用于详细说明一段SQL的用途等。
*/
SELECT * FROM orders;🔹 示例:注释掉某部分代码(临时禁用)
SELECT * FROM users
/*
WHERE status = 'inactive'
*/
AND age > 18;✅ 上面的 SQL 实际执行的是:
SELECT * FROM users AND age > 18;(WHERE status 那行被注释掉了)⚠️ 注意:如果注释写法不对(比如缺少
*/),会导致 SQL 语法错误!
你可以在 SQL 语句的任意位置插入注释,比如在列名后、表名后、条件中间等,提高代码可读性。
SELECT
user_id, -- 用户唯一标识
username, # 用户名
created_at -- 注册时间
FROM users
WHERE status = 'active'; /* 只查询活跃用户 */✅ 这种写法在复杂 SQL 中非常常见,用于解释字段、表用途、条件含义等
场景 | 示例 | 说明 |
|---|---|---|
解释 SQL 用途 | -- 查询所有活跃用户SELECT * FROM users WHERE status = 'active'; | 增强代码可读性 |
临时禁用代码 | SELECT * FROM users-- WHERE status = 'deleted' | 快速注释某条件,不用删除代码 |
多行说明 | /*<br> 该 SQL 用于生成每日销售报表<br> 创建时间:2024-06-01<br>*/SELECT ... | 详细说明一段逻辑 |
字段解释 | SELECT user_id -- 用户ID, name -- 姓名 FROM users | 行内解释列含义 |
调试 SQL | 注释掉部分 JOIN 或 WHERE 条件,逐步排查问题 | 常用调试技巧 |
建议 | 说明 |
|---|---|
推荐使用 #或 --(带空格)做单行注释 | 尤其是在 MySQL 脚本、存储过程、函数中常见 |
复杂逻辑使用 /* ... */多行注释 | 便于写多行说明,比如表用途、作者、时间等 |
注释与代码保留同一缩进 | 增强可读性 |
避免过多无意义注释 | 注释应解释“为什么”,而非“做什么”(代码本身应尽量清晰) |
调试时可以灵活注释部分代码 | 比如临时禁用 WHERE、JOIN、ORDER BY 等 |
# 查询所有用户
SELECT * FROM users;
-- 以下查询年龄大于18的用户(注意空格)
SELECT * FROM users WHERE age > 18;/*
目的:查询活跃用户的订单信息
作者:Hunyuan
日期:2024-06-01
*/
SELECT
o.order_id,
u.username
FROM orders o
JOIN users u ON o.user_id = u.user_id
WHERE o.status = 'active';SELECT
user_id, -- 用户唯一ID
username, # 登录名
email -- 联系方式
FROM users
WHERE is_active = 1; /* 只查询激活用户 */SELECT
u.user_id,
u.name,
o.order_date
FROM users u
-- WHERE u.is_vip = 1
JOIN orders o ON u.user_id = o.user_id
WHERE o.order_date > '2024-01-01';✅ 上面 SQL 中
WHERE u.is_vip = 1被注释掉了,不会生效