文章目录
- 引言
- [一、 到底什么是 MySQL?(大白话带你秒懂)](#一、 到底什么是 MySQL?(大白话带你秒懂))
-
- 认识今天的主角:MySQL
- [为什么有了 Excel 还要学 MySQL?](#为什么有了 Excel 还要学 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 天生就是为了处理海量数据 和高并发访问而生的。它具有以下三大杀手锏:
- 开源免费:中小企业的首选,不花钱就能享受企业级的性能。
- 性能强悍:能够轻松处理千万级甚至上亿级别的数据检索。
- 安全可靠:支持事务处理(后面会讲),保证断电、死机时核心数据(如交易流水)不丢失、不混乱。
💡 总结:
理解了 MySQL 就是一个"超级无敌 Plus 版的 Excel"后,我们再来看看用来操作它的"魔法咒语"------SQL。
二、 SQL 与 MySQL 的关系
在写代码之前,我们需要先明确一个极易混淆的概念:
- SQL (Structured Query Language) :结构化查询语言。它是一种规范和标准,用来与关系型数据库通信。
- MySQL :是一个具体的关系型数据库管理系统 (RDBMS)。它是 SQL 标准的一种主流实现(其他实现还包括 Oracle、SQL Server、PostgreSQL 等)。
打个比方:SQL 就像是"普通话",而 MySQL、Oracle 就像是操着不同口音的人,他们都能听懂普通话,但各自也有一些独有的方言(特有语法)。
三、SQL 通用语法规范
养成良好的 SQL 书写习惯,能极大提高代码的可维护性和排查效率:
- 语句结束:SQL 语句可以单行或多行书写,统一以分号 ; 结尾。
- 排版格式:强烈建议使用空格和换行缩进来增强复杂查询的可读性。
- 大小写规范 :
- MySQL 数据库的 SQL 语句在语法上不区分大小写。
- 行业最佳实践:系统关键字(如 SELECT, FROM, WHERE)全部使用大写;数据库名、表名、字段名全部使用小写。这不仅能提高肉眼阅读速度,在某些早期数据库系统中也能微弱提升解析效率。
- 注释编写:
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 的区别是什么?
- 分类不同:DELETE 是 DML,TRUNCATE 是 DDL。
- 执行机制: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 语句时,不妨先判断它属于哪个分类,这样能帮你快速理解它的意图和可能带来的风险。