MySQL 作为世界上最流行的开源关系型数据库,是我们每一位码农、数据分析师乃至产品经理都应掌握的核心工具。它以其高性能、高可靠性和易用性而闻名。掌握其基础知识,是通往后端开发、数据科学等领域的必经之路。
我将围绕以下几个核心要点,带你快速构建 MySQL 的知识体系。
一、 数据库与SQL:核心概念
- 数据库:一个存储和管理数据的仓库,可以看作一个电子化的文件柜。
- 表:数据库中实际存放数据的基本单位,由行和列组成。例如,一个
users
表用来存储所有用户信息。 - 列:表中的一个字段,定义了数据的类型和约束(如
id
,name
,email
)。每一列都有特定的数据类型。 - 行:表中的一条记录(如一个用户的所有信息)。
- 主键:唯一标识表中每一行的一列或一组列(如
id
)。主键的值必须唯一且不能为空。 - SQL:结构化查询语言,用于与数据库通信,进行数据定义、查询、操纵和控制。
二、 基础SQL语法:四大核心操作
SQL 语言主要分为四类,常被称为 CRUD:
-
C - Create:使用
INSERT
语句向表中添加新记录。INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);
-
R - Read:使用
SELECT
语句从表中查询数据,这是最常用和最复杂的操作。-- 查询所有列 SELECT * FROM users;-- 查询特定列 SELECT name, email FROM users;-- 带条件的查询 SELECT * FROM users WHERE age > 18;
-
U - Update:使用
UPDATE
语句修改表中已有的记录。UPDATE users SET age = 26 WHERE name = '张三';
注意:务必使用
WHERE
子句,否则将更新表中所有行! -
D - Delete:使用
DELETE
语句从表中删除记录。DELETE FROM users WHERE name = '李四';
注意:务必使用
WHERE
子句,否则将清空整个表!
三、 关键查询技巧:让数据筛选更精准
-
WHERE 子句:用于过滤记录,支持多种运算符。
- 比较运算符:
=
,<>
或!=
,>
,<
,>=
,<=
- 逻辑运算符:
AND
,OR
,NOT
- 范围匹配:
BETWEEN ... AND ...
,IN (...)
- 模糊匹配:
LIKE
(%
匹配多个字符,_
匹配一个字符)
SELECT * FROM users WHERE name LIKE '张%' AND age BETWEEN 20 AND 30;
- 比较运算符:
-
ORDER BY 子句:用于对结果集进行排序。
ASC
:升序(默认)DESC
:降序
SELECT * FROM users ORDER BY age DESC, id ASC; -- 先按年龄降序,再按id升序
-
LIMIT 子句:限制返回的记录数量,常用于分页。
SELECT * FROM users LIMIT 10; -- 返回前10条 SELECT * FROM users LIMIT 5, 10; -- 从第6条开始(跳过5条),返回10条
-
聚合函数:对一组值执行计算并返回单个值。
COUNT()
:计数SUM()
:求和AVG()
:平均值MAX()
/MIN()
:最大/最小值
SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;
-
GROUP BY 子句:将结果集按一列或多列分组,通常与聚合函数一起使用。
-- 统计每个年龄段的用户数量 SELECT age, COUNT(*) FROM users GROUP BY age;
-
HAVING 子句:用于过滤分组后的结果集。
WHERE
在分组前过滤行,而HAVING
在分组后过滤组。-- 筛选出用户数量大于5的年龄段 SELECT age, COUNT(*) as count FROM users GROUP BY age HAVING count > 5;
四、 表的设计与关系:数据类型与约束
-
常用数据类型:
- 整数:
INT
,BIGINT
,TINYINT
- 小数:
DECIMAL(M, N)
(精确小数),FLOAT
,DOUBLE
(近似小数) - 字符串:
VARCHAR(N)
(可变长度),CHAR(N)
(固定长度),TEXT
(长文本) - 日期时间:
DATE
,TIME
,DATETIME
,TIMESTAMP
- 整数:
-
重要约束:
NOT NULL
:确保列不能有 NULL 值。UNIQUE
:确保列中的所有值都不相同。PRIMARY KEY
:NOT NULL
和UNIQUE
的结合。FOREIGN KEY
:保证一个表中的数据匹配另一个表中值的参照完整性。DEFAULT
:为列设置默认值。AUTO_INCREMENT
:自动为列生成唯一的、递增的数字(通常用于主键)。
五、 连接查询:多表关联的灵魂
当需要从多个表中获取关联数据时,就需要使用连接查询。
-
INNER JOIN:返回两个表中匹配的行。
SELECT orders.order_id, users.name FROM orders INNER JOIN users ON orders.user_id = users.id;
-
LEFT JOIN:返回左表的所有行,以及右表中匹配的行。如果右表无匹配,则结果为 NULL。
SELECT users.name, orders.order_id FROM users LEFT JOIN orders ON users.id = orders.user_id;
-
RIGHT JOIN:与
LEFT JOIN
相反,返回右表的所有行。 -
FULL OUTER JOIN:返回左右表中所有的行(MySQL 不直接支持,可用
UNION
模拟)。
总结
掌握以上 MySQL 基础知识要点,就能够完成日常工作中 80% 的数据库操作。从基本的 CRUD 到复杂的多表连接查询,这些是构建任何数据驱动应用的基石。
下一步建议:
- 索引:学习如何创建索引以优化查询速度。
- 事务:了解
BEGIN
,COMMIT
,ROLLBACK
,确保数据的一致性。 - 视图:将复杂的查询保存为虚拟表,简化操作。
- 存储过程和函数:在数据库服务器端执行复杂的逻辑。
实践是学习 MySQL 的最佳途径。尝试在自己的项目中创建表、插入数据并执行各种查询,你会迅速巩固这些知识,并发现其强大之处。