目录

前言

1. 什么是 MySQL?

2. 核心概念:数据库的“三驾马车”

2.1 数据库 (Database)

2.2 表 (Table)

2.3 数据类型 (Data Types)

3. CRUD:数据的增删改查

3.1 Create (增加)

3.2 Read (读取/查询)

3.3 Update (更新)

3.4 Delete (删除)

4. 进阶基础:约束与索引

4.1 约束 (Constraints)

4.2 索引 (Index)

5. SQL 核心操作:增删改查 (CRUD)

5.1 插入数据 (Create)

5.2 查询数据 (Read)

5.3 更新数据 (Update)

5.4 删除数据 (Delete)

移除记录。同样要注意 WHERE 条件。

6. 数据的完整性:约束

7. 性能优化的关键:索引

8. 进阶查询技巧

8.1 聚合函数

8.2 多表连接

9. 事务处理

结语


前言

在软件开发和数据处理的领域中,数据库是不可或缺的基础设施。而在众多的关系型数据库管理系统(RDBMS)中,MySQL 凭借其开源、免费、高性能和易用性,成为了全球最受欢迎的数据库之一。无论是小型的个人博客,还是大型互联网企业的核心业务系统,都能看到 MySQL 的身影。


本文将带你快速了解 MySQL 的核心基础知识,帮助你从零开始建立对关系型数据库的认知。

1. 什么是 MySQL?

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。
         关系型数据库 (RDBMS):数据以“表”的形式存储,表与表之间可以通过关联字段建立联系(如外键)。
         SQL 语言:MySQL 使用结构化查询语言(Structured Query Language)来进行数据的增删改查。

2. 核心概念:数据库的“三驾马车”

要理解 MySQL,首先要搞清楚三个层级的概念:

2.1 数据库 (Database)

数据库是最大的容器,用来存放一组相关的数据表。这就好比是一个“文件夹”或者一个“仓库”。

操作命令:

        CREATE DATABASE my_db; (创建数据库)
        USE my_db; (进入/使用该数据库)

2.2 表 (Table)

表是数据存储的基本单位,类似于 Excel 中的工作表。它由行和列组成。
        行 (Row/Record):代表一条具体的数据记录(例如:一个用户的信息)。
        列 (Column/Field):代表数据的属性(例如:用户名、年龄、邮箱)。

2.3 数据类型 (Data Types)

在建表时,必须为每一列指定数据类型,以保证数据的规范性和存储效率。常见的类型包括:

数值型:INT (整数), FLOAT/DOUBLE (浮点数), DECIMAL (高精度小数)。
字符串型:CHAR (定长), VARCHAR (变长,最常用), TEXT (长文本)。
日期时间型:DATE, DATETIME, TIMESTAMP。

3. CRUD:数据的增删改查

这是开发人员日常打交道最多的部分,也就是 SQL 语句的核心。

3.1 Create (增加)

向表中插入新数据。

INSERT INTO users (username, age) VALUES ('Alice', 25);

3.2 Read (读取/查询)

从表中检索数据,这是最复杂也是最重要的部分。

-- 查询所有用户
SELECT * FROM users;

-- 条件查询:查找年龄大于 20 的用户
SELECT username FROM users WHERE age > 20;

3.3 Update (更新)

修改表中已有的数据。注意: 更新时通常一定要加 WHERE 条件,否则会修改整张表!

UPDATE users SET age = 26 WHERE username = 'Alice';

3.4 Delete (删除)

从表中移除数据。同样,务必小心使用 WHERE 条件。

DELETE FROM users WHERE username = 'Alice';

4. 进阶基础:约束与索引

为了让数据更准确、查询更快速,我们需要引入两个重要概念。

4.1 约束 (Constraints)

约束是作用于表中列上的规则,用于限制加入表的数据的类型,保证数据的完整性。
        主键 (PRIMARY KEY):唯一标识表中的每一行,不能为空且不能重复(如身份证号)。
        非空 (NOT NULL):该列的值不能为空。
        唯一 (UNIQUE):该列的值在表中必须是唯一的(如手机号)。
        默认值 (DEFAULT):如果没有给该列赋值,则使用默认值。

4.2 索引 (Index)

索引就像书的目录。如果没有索引,MySQL 查找数据时需要从头到尾扫描全表(全表扫描),速度极慢。建立了索引后,MySQL 可以利用数据结构(如 B+树)快速定位数据。

提示:虽然索引能加快查询速度,但会降低写入(增删改)的速度,因为每次修改数据都要同步更新索引。因此,索引不是越多越好,通常加在经常作为查询条件的字段上。

5. SQL 核心操作:增删改查 (CRUD)

这是日常开发中最常用的操作,也是面试的高频考点。

5.1 插入数据 (Create)

向表中添加新记录。

-- 插入单条数据
INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com');

-- 批量插入(效率更高)
INSERT INTO users (name, age) VALUES ('李四', 28), ('王五', 30);

5.2 查询数据 (Read)

从表中检索数据,是 SQL 中最复杂的部分。

-- 查询所有字段
SELECT * FROM users;

-- 条件查询
SELECT name, age FROM users WHERE age > 20 AND name LIKE '张%';

-- 排序与分页
SELECT * FROM users ORDER BY age DESC LIMIT 10 OFFSET 0; -- 按年龄降序,取前10条

5.3 更新数据 (Update)

修改现有的记录。注意: 生产环境中执行 UPDATE 务必带上 WHERE 条件,否则会更新全表!

UPDATE users SET age = 26, email = 'new_email@example.com' WHERE id = 1;

5.4 删除数据 (Delete)

移除记录。同样要注意 WHERE 条件。

DELETE FROM users WHERE id = 1;

避坑指南:
DELETE 只是逻辑上删除数据(或标记删除),数据实际上还在磁盘上,且自增 ID 不会重置。如果是清空整张表且不需要恢复,使用 TRUNCATE TABLE users; 速度更快且彻底。

6. 数据的完整性:约束

为了保证存入数据库的数据是准确、可靠的,我们需要给表加上“规矩”,这就是约束。

         主键: 唯一标识每一行数据,不能为空,不能重复。通常是 id 字段。
         非空: 规定某个字段必须有值,不能是 NULL。
         唯一: 规定某个字段的值在全表中不能重复(例如手机号、身份证号)。
         默认值: 如果插入数据时没填这个字段,系统自动填入一个默认值。
         外键: 建立两张表之间的联系,保证引用完整性(例如订单表里的用户 ID 必须在用户表里存在)。

7. 性能优化的关键:索引

如果把数据库比作一本书,索引就是目录。没有索引,找数据就像从第一页翻到最后一页(全表扫描);有了索引,可以直接定位到数据位置。

        普通索引: 最基本的索引,没有任何限制。
        唯一索引: 索引列的值必须唯一,允许有空值。
        主键索引: 特殊的唯一索引,不允许有空值。
        联合索引: 在多个列上建立的索引(遵循“最左前缀原则”)。

注意: 索引虽然能加快查询速度,但会减慢写入速度(因为每次插入/修改都要更新索引树),且占用额外的磁盘空间。不要盲目给所有字段加索引。

8. 进阶查询技巧

8.1 聚合函数

用于统计数据,常配合 GROUP BY 使用。

COUNT(): 统计行数
SUM(): 求和
AVG(): 平均值
MAX() / MIN(): 最大/最小值

示例:统计每个部门的平均工资

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 5000; -- HAVING 用于过滤分组后的结果

8.2 多表连接

实际业务中,数据往往分散在多张表中,需要把它们“拼”起来。

        INNER JOIN (内连接): 只返回两张表中匹配上的行(交集)。
        LEFT JOIN (左连接): 返回左表所有行,即使右表没有匹配(右表字段补 NULL)。
        RIGHT JOIN (右连接): 返回右表所有行。

9. 事务处理

事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态。事务必须满足 ACID 特性:

原子性: 要么全做,要么全不做。
一致性: 事务前后数据完整性保持一致。
隔离性: 多个事务互不干扰。
持久性: 事务一旦提交,修改就是永久的。

START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE user_id = 1;
UPDATE account SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- 提交事务,生效
-- ROLLBACK; -- 如果出错,回滚事务

结语

MySQL 的世界博大精深,以上只是冰山一角。掌握了这些基础,你就具备了进行日常开发和应对初级面试的能力。接下来的路,建议你多动手写 SQL,尝试分析执行计划,去理解 B+ 树底层原理,那样你的技术会有质的飞跃。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐