深入浅出 MySQL(一):一文理清 SQL 核心规范与五大分类

文章目录

  • 引言
  • [一、 到底什么是 MySQL?(大白话带你秒懂)](#一、 到底什么是 MySQL?(大白话带你秒懂))
  • [二、 SQL 与 MySQL 的关系](#二、 SQL 与 MySQL 的关系)
  • [三、SQL 通用语法规范](#三、SQL 通用语法规范)
  • [四、SQL 语句的五大核心分类](#四、SQL 语句的五大核心分类)
    • [DQL (数据查询语言):开发者的日常](#DQL (数据查询语言):开发者的日常)
    • [DML (数据操作语言):操纵数据的利器](#DML (数据操作语言):操纵数据的利器)
    • [DDL (数据定义语言):数据库的架构师](#DDL (数据定义语言):数据库的架构师)
    • [DCL (数据控制语言):安全守门员](#DCL (数据控制语言):安全守门员)
    • [TCL (事务控制语言):数据一致性的底线](#TCL (事务控制语言):数据一致性的底线)
  • 五、总结

引言

无论是后端开发、数据分析还是软件测试,数据库操作都是基本功。很多人刚开始学习 MySQL 时,很容易迷失在复杂的连表查询和函数中,而忽略了对 SQL 语言全局架构的认知。

本系列将从基础出发,系统性地梳理 MySQL 知识网络。第一篇,让我们先回到原点,把 SQL 的语法规范和最核心的"五大分类"彻底理清。

一、 到底什么是 MySQL?(大白话带你秒懂)

认识今天的主角:MySQL

在学习 SQL 语句之前,我们得先认识一下今天的主角:MySQL

官方定义里,MySQL 是一个关系型数据库管理系统 (RDBMS)。听起来很高深?别慌,我们用大家最熟悉的 Excel 来做一个类比,你就能秒懂它的底层逻辑:

  • 数据库系统 (MySQL 软件) :相当于你电脑上安装的整个 Excel 软件
  • 数据库 (Database) :相当于你新建的一个 Excel 工作簿(比如命名为"2023年公司数据.xlsx")。
  • 数据表 (Table) :相当于工作簿底部的工作表(Sheet1:员工表,Sheet2:部门表)。
  • 数据行 (Row/Record) :相当于表格中的一行,代表一条具体的数据(比如张三的全部信息)。
  • 数据列 (Column/Field) :相当于表格中的一列,代表数据的一个属性(比如所有的"年龄"列)。

为什么有了 Excel 还要学 MySQL?

既然有了可视化的 Excel,为什么还要学纯敲代码的 MySQL 呢?

这是因为 Excel 存在物理瓶颈(通常百万行就卡死了),而 MySQL 天生就是为了处理海量数据高并发访问而生的。它具有以下三大杀手锏:

  1. 开源免费:中小企业的首选,不花钱就能享受企业级的性能。
  2. 性能强悍:能够轻松处理千万级甚至上亿级别的数据检索。
  3. 安全可靠:支持事务处理(后面会讲),保证断电、死机时核心数据(如交易流水)不丢失、不混乱。

💡 总结:

理解了 MySQL 就是一个"超级无敌 Plus 版的 Excel"后,我们再来看看用来操作它的"魔法咒语"------SQL

二、 SQL 与 MySQL 的关系

在写代码之前,我们需要先明确一个极易混淆的概念:

  • SQL (Structured Query Language) :结构化查询语言。它是一种规范和标准,用来与关系型数据库通信。
  • MySQL :是一个具体的关系型数据库管理系统 (RDBMS)。它是 SQL 标准的一种主流实现(其他实现还包括 Oracle、SQL Server、PostgreSQL 等)。

打个比方:SQL 就像是"普通话",而 MySQL、Oracle 就像是操着不同口音的人,他们都能听懂普通话,但各自也有一些独有的方言(特有语法)。

三、SQL 通用语法规范

养成良好的 SQL 书写习惯,能极大提高代码的可维护性和排查效率:

  1. 语句结束:SQL 语句可以单行或多行书写,统一以分号 ; 结尾。
  2. 排版格式:强烈建议使用空格和换行缩进来增强复杂查询的可读性。
  3. 大小写规范
    • MySQL 数据库的 SQL 语句在语法上不区分大小写
    • 行业最佳实践:系统关键字(如 SELECT, FROM, WHERE)全部使用大写;数据库名、表名、字段名全部使用小写。这不仅能提高肉眼阅读速度,在某些早期数据库系统中也能微弱提升解析效率。
  4. 注释编写
sql 复制代码
-- 单行注释 (注意:两个破折号后必须紧跟一个空格)
# 单行注释 (MySQL 特有语法,不需要空格)

/*
  多行注释
  通常用于对复杂的存储过程或超长查询进行逻辑说明
*/

四、SQL 语句的五大核心分类

SQL 语句繁多,但根据其操作对象的不同,可以精准地划分为 5 大类。建立这个分类框架,能帮助你在排查问题时迅速定位方向。

简称 全称 中文名称 核心命令 主要作用
DQL Data Query Language 数据查询语言 SELECT 从数据库表中检索数据。
DML Data Manipulation Language 数据操作语言 INSERT, UPDATE, DELETE 对表中的数据进行增、删、改。
DDL Data Definition Language 数据定义语言 CREATE, ALTER, DROP, TRUNCATE 定义或修改数据库及其对象(表、视图、索引等)的结构。
DCL Data Control Language 数据控制语言 GRANT, REVOKE 管理数据库的访问权限和安全级别。
TCL Transaction Control Language 事务控制语言 COMMIT, ROLLBACK, SAVEPOINT 管理数据库中的事务,确保数据一致性。

DQL (数据查询语言):开发者的日常

日常开发中 80% 的 SQL 都是 DQL。它就像一个精密的过滤器,专门用于从庞大的数据库中提取你需要的数据。它极其安全,绝不会改变源数据。

  • 核心命令: SELECT
  • 基础示例:
sql 复制代码
SELECT 姓名, 年龄 FROM 员工表 WHERE 年龄 > 25 ORDER BY 年龄 DESC;

思考:SQL 的书写顺序与执行顺序并不一致

我们写出来的顺序是 SELECT ... FROM ... WHERE ...,但数据库引擎底层的执行顺序其实是:先找到表 (FROM) -> 过滤数据 (WHERE) -> 提取列 (SELECT)。理解这一点,是写出高性能复杂查询的前提。

DML (数据操作语言):操纵数据的利器

如果说 DQL 是"读",那么 DML 就是"写"。这类语言专门用于对表里的具体数据行进行增、删、改。

  • INSERT (增): INSERT INTO 员工表 (姓名, 年龄) VALUES ('张三', 28);
  • UPDATE (改): UPDATE 员工表 SET 年龄 = 29 WHERE 姓名 = '张三';
  • DELETE (删): DELETE FROM 员工表 WHERE 姓名 = '张三';

在生产环境中执行 UPDATE 和 DELETE 时,务必、千万要带上 WHERE 条件!如果没有 WHERE,你会把整张表的数据全部修改或删光,酿成 P0 级生产事故。

DDL (数据定义语言):数据库的架构师

DML 操作的是"抽屉里的文件(数据)",而 DDL 操作的是"抽屉本身(表结构)"。

  • CREATE (创建): CREATE TABLE 部门表 (ID INT, 名称 VARCHAR(50));
  • ALTER (修改): ALTER TABLE 员工表 ADD 邮箱 VARCHAR(100);
  • DROP (摧毁): DROP TABLE 部门表; (直接抹除表结构和所有数据)
  • TRUNCATE (清空): TRUNCATE TABLE 员工表;

DELETE 和 TRUNCATE 的区别是什么?

  1. 分类不同:DELETE 是 DML,TRUNCATE 是 DDL。
  2. 执行机制:DELETE 是一行一行地删,效率较低,但可以被事务回滚;TRUNCATE 是直接把旧表摧毁并重建一张同名空表,速度极快,但无法回滚。执行前请三思!

DCL (数据控制语言):安全守门员

主要由 DBA(数据库管理员)把控,用于决定"谁能看什么,谁能改什么"。

  • GRANT (赋权): GRANT SELECT, INSERT ON 员工表 TO 'user1';
  • REVOKE (撤权): REVOKE INSERT ON 员工表 FROM 'user1';

TCL (事务控制语言):数据一致性的底线

用于管理 DML 操作引发的数据更改。它能将多个操作(比如转账时的"A扣钱"和"B加钱")捆绑成一个不可分割的整体,确保在系统发生故障时,数据不会出现"半吊子"的状态。

  • COMMIT (提交): 确认所有操作无误,将数据持久化保存到磁盘。
  • ROLLBACK (回滚): 发现异常,撤销自上次提交以来的所有更改,恢复原状。

五、总结

理清 SQL 的五大门派,是深入学习 MySQL 的第一步。当你下次看到一条陌生的 SQL 语句时,不妨先判断它属于哪个分类,这样能帮你快速理解它的意图和可能带来的风险。

相关推荐
woniu_buhui_fei2 小时前
MySQL知识整理二
数据库·mysql
Polar__Star3 小时前
如何在 AWS Lambda 中正确使用临时凭证生成 S3 预签名 URL
jvm·数据库·python
Lucifer三思而后行3 小时前
zCloud 中 Oracle 实例状态未知问题记录
数据库·oracle
island13143 小时前
最详细VMware Workstation 17 上安装 Ubuntu 系统
linux·数据库·ubuntu
卢傢蕊3 小时前
MongoDB
数据库·mongodb
m0_743623923 小时前
React 自定义 Hook 的命名规范与调用规则详解
jvm·数据库·python
古城小栈3 小时前
GORM 操作 PostgreSQL 高级类型
数据库·postgresql
ward RINL3 小时前
redis分页查询
数据库·redis·缓存
Treh UNFO3 小时前
Redis-配置文件
数据库·redis·oracle