飞翔飞翔
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 数据定义(DDL)

    • SQL简介
    • SQL语法
    • SQL注释
    • 创建数据库
    • 删除数据库
    • 创建表
    • 修改表
    • 删除表
    • 约束概述
    • NOT NULL约束
    • UNIQUE约束
    • PRIMARY KEY约束
    • FOREIGN KEY约束
    • CHECK约束
    • DEFAULT约束
    • 视图
    • 索引
    • 自增字段
    • 日期类型
  • 第2章 数据操作(DML)

    • 基础查询

      • SELECT查询
      • DISTINCT去重
      • LIMIT限制行数
      • 别名
      • 通配符
    • 条件过滤

      • WHERE条件筛选
      • AND运算符
      • OR运算符
      • NOT运算符
      • BETWEEN区间
      • IN运算符
      • LIKE模糊匹配
      • ORDER BY排序
    • 聚合函数

      • 聚合函数概述
      • COUNT计数
      • SUM求和
      • AVG平均值
      • MAX最大值
      • MIN最小值
    • 分组过滤

      • GROUP BY分组
      • HAVING过滤分组
    • 数据修改

      • INSERT插入数据
      • UPDATE修改数据
      • DELETE删除数据
      • NULL值处理
    • 表连接

      • JOIN连接概述
      • INNER JOIN内连接
      • LEFT JOIN左连接
      • RIGHT JOIN右连接
      • FULL JOIN全连接
      • SELF JOIN自连接
    • 集合操作

      • UNION并集
      • UNION ALL不去重并集
    • 高级查询

      • ALL运算符
      • ANY运算符
      • CASE条件表达式
      • EXISTS存在性检查
      • NULL处理函数
  • 第3章 事务控制(TCL)

    • COMMIT提交事务
    • ROLLBACK回滚
    • SAVEPOINT存档点
  • 第4章 数据控制(DCL)

    • GRANT授权
    • REVOKE撤销权限
    • SQL托管
    • SQL注入防护
  • 第5章 进阶主题

    • INSERT INTO SELECT复制数据
    • SELECT INTO复制表
    • 参数化查询
    • 预编译语句
    • 备份数据库
    • 存储过程
  • 第6章 参考

    • 关键字参考
    • 快速参考
    • 数据类型
    • 运算符

SQL 注释

一句话理解:注释是写给人类看的备注,数据库引擎会直接跳过它。

SQL 里写注释有两种姿势:单行注释用两个短横 -- 开头,从它到行尾的内容都是注释;多行注释用 /* ... */ 包裹,可以跨任意多行。MySQL 还额外支持 # 做单行注释,但 -- 是更通用的标准写法。

注释可以出现在 SQL 语句的任何位置——写在查询开头说明这段代码的用途,夹在列名后面解释某个字段的含义,或者单独占一行记录修改历史。数据库执行时对这些内容视而不见,只关心真正的 SQL 指令。

想想你三个月后回来看自己写的一段复杂查询——几十行 SQL,嵌套了三层子查询,还连了五张表。如果没有注释,你可能要花半小时重新理解当时的思路。如果是别人接手你的代码,那更是灾难。注释就是给未来的自己(和同事)留的线索,也是团队协作的基本礼仪。

还有一个实用场景:调试时你可以用注释快速"禁用"某段条件或某个列,而不需要删了再写、写了再删。另外,文件头部的注释通常用来记录作者、创建时间和变更日志。

基本写法:

-- 这是单行注释(从 -- 到行尾都被忽略)

/*
这是多行注释
可以跨越多行
*/

# MySQL 风格单行注释(非标准,仅 MySQL 支持)

单行注释 --

-- 后面的内容到行尾全部被数据库引擎忽略。三个典型用法:

① 放在行首,解释下方语句的用途:

-- 查询技术部所有员工的工资明细
SELECT employee_name, basic_salary
FROM employees
WHERE dept_name = '技术部';

② 放在行尾,注释掉多余的条件(调试利器):

SELECT * FROM employees -- WHERE dept_name = '技术部';

这条语句原本只查技术部,但现在 WHERE 条件被 -- 注释掉了,实际执行的是 SELECT * FROM employees——查出所有员工。调试时你可以快速"禁用"某个条件,不用删代码,需要时去掉 -- 就能恢复。

③ 放在行首,临时禁用整条语句:

-- SELECT * FROM employees WHERE dept_name = '技术部';
SELECT * FROM employees WHERE dept_name = '行政部';

上面查技术部的语句被注释掉了,只执行查行政部的。调试时经常这样在几条候选 SQL 之间切换,比反复删除和重写方便得多。

④ 放在列名后面,解释字段含义:

SELECT
    employee_name,        -- 员工姓名
    basic_salary,         -- 基本工资
    performance_bonus     -- 绩效奖金,无则为 0
FROM employees;

多行注释 /* ... */

/* 和 */ 之间的所有内容都被忽略,可以跨任意多行。它比 -- 更灵活——不仅能注释整块代码,还能注释一行中间的某个片段。

① 注释一段说明文字:

/*
  广州飞翔科技
  工资报表提取脚本
  生成日期:2018 年
  数据来源:feixiang_db.employees
*/
SELECT employee_name, basic_salary FROM employees;

② 调试时禁用多条语句(整块注释):

/* SELECT * FROM employees WHERE dept_name = '技术部';
SELECT * FROM employees WHERE dept_name = '市场部';
SELECT * FROM employees WHERE dept_name = '行政部'; */
SELECT * FROM employees WHERE dept_name = '人事部';

前三条全被注释掉了,只有最后一条会执行。排查问题时,一次性屏蔽一批 SQL 再逐条放开,是高效的调试节奏。

③ 注释掉 SELECT 中的某些列(精简输出):

SELECT employee_name, /*basic_salary,*/ dept_name
FROM employees;

basic_salary 列被注释掉了,查询结果只返回姓名和部门。调试大数据量时,可以先用注释去掉不必要的列,让结果更清晰。

④ 注释掉 WHERE 中的部分条件(缩小筛选范围):

SELECT * FROM employees
WHERE (dept_name = '技术部'
OR dept_name = '市场部' 
/*OR dept_name = '行政部'
OR dept_name = '人事部'*/ 
OR dept_name = '财务部')
AND basic_salary > 8000;

中间两个部门条件被注释掉了,实际只查技术部、市场部和财务部。这样可以在不改变 SQL 整体结构的前提下,灵活调整筛选范围。

完整示例

下面是飞翔科技查询技术部员工工资的一段 SQL,综合运用了多种注释:

-- 查询技术部员工的工资明细
-- 包含基本工资、绩效奖金、社保扣除和个税
SELECT
    employee_name,
    basic_salary,          -- 基本工资
    performance_bonus,     -- 绩效奖金,部分员工没有则为 0
    basic_salary + performance_bonus - social_security - personal_tax AS actual_salary
FROM employees
WHERE dept_name = '技术部' /* AND basic_salary > 5000 */;

/*
  广州飞翔科技
  工资报表提取脚本
  生成日期:2018 年
  数据来源:feixiang_db.employees
*/

注意 WHERE 行的 /* AND basic_salary > 5000 */:当前查的是技术部全部员工,如果后续想只看高薪员工,去掉 /* */ 就行,不需要重新写条件。

有了这些注释,任何人拿过去都能秒懂:这段 SQL 查的是技术部,实发工资怎么算的,数据从哪来的,哪块条件是预留的调试开关。写注释花不了几秒钟,省下来的理解时间却是实实在在的。

上一页
SQL语法
下一页
创建数据库