MySQL 数据库入门教程:从零开始成为数据库小能手

目录

  1. 第一部分:初识数据库

    mysql数据库入门教程
    (图片来源网络,侵删)
    • 什么是数据库?
    • 什么是MySQL?
    • 为什么学习MySQL?
    • 数据库的几个核心概念
  2. 第二部分:环境搭建

    • 安装MySQL
    • 安装图形化管理工具(推荐:MySQL Workbench)
    • 连接到你的MySQL服务器
  3. 第三部分:SQL语言基础

    • 什么是SQL?
    • SQL的分类(DDL, DML, DQL, DCL)
    • 数据库操作
    • 表操作
  4. 第四部分:数据操作(增删改查)

    • CRUD:创建数据
    • Read:查询数据
    • Update:更新数据
    • Delete:删除数据
  5. 第五部分:数据查询进阶

    mysql数据库入门教程
    (图片来源网络,侵删)
    • 条件查询
    • 排序
    • 聚合函数
    • 分组查询
    • 多表查询(JOIN)
  6. 第六部分:数据类型与约束

    • 常见数据类型
    • 常见约束
  7. 第七部分:索引与优化(入门)

    • 什么是索引?
    • 为什么要用索引?
    • 如何创建索引?
  8. 第八部分:总结与学习路径

    • 回顾
    • 下一步该学什么?

第一部分:初识数据库

什么是数据库?

想象一下你的手机通讯录,你可以在里面添加、修改、删除和查找联系人,这个通讯录就是一个最简单的“数据库”,它是一个有组织地、可共享地、统一管理的数据集合。

mysql数据库入门教程
(图片来源网络,侵删)

在计算机中,数据库就是长期储存在计算机内、有组织的、可共享的大量数据的集合,数据库管理系统(DBMS,Database Management System)是用于管理数据库的软件,比如MySQL、Oracle、SQL Server等。

什么是MySQL?

MySQL 是目前最流行的关系型数据库管理系统之一,它使用结构化查询语言进行数据管理,MySQL 是开源的、免费的(社区版),性能出色,因此被广泛应用于网站后端(如WordPress, Facebook, Twitter等)。

为什么学习MySQL?

  • 行业需求:Web开发、数据分析、后端工程师等岗位的必备技能。
  • 数据存储:几乎所有应用程序都需要存储数据,而数据库是标准解决方案。
  • 学习基础:理解数据如何被组织和管理,是学习更高级技术(如大数据、人工智能)的基础。

数据库的几个核心概念

  • 数据库:一个存储数据的容器,可以包含多个表。
  • :数据库中存储具体数据的结构化集合,由行和列组成。
  • :表中的一条记录,代表一个完整的数据实体,用户表中的一行代表一个用户。
  • :表中的一个字段,定义了数据的属性,用户表中的name列代表用户的姓名。
  • 主键:表中唯一标识每一行记录的列,主键的值必须是唯一的,不能为空。

第二部分:环境搭建

安装MySQL

根据你的操作系统选择对应的安装包进行安装:

  • Windows: 访问 MySQL 官网下载页面,下载 MySQL Installer for Windows,运行安装程序,按照向导一步步操作即可,建议选择 "Full" 安装,它会自动帮你配置好。
  • macOS: 最简单的方式是使用 Homebrew:
    brew install mysql
  • Linux (Ubuntu/Debian):
    sudo apt update
    sudo apt install mysql-server

安装完成后,可以尝试在终端输入 mysql --version 检查是否安装成功。

安装图形化管理工具(推荐:MySQL Workbench)

虽然我们可以通过命令行操作MySQL,但图形化界面更直观,方便初学者学习。

  • MySQL Workbench: MySQL官方提供的免费工具,功能强大,下载地址:MySQL Workbench Download
  • 其他工具:Navicat, DBeaver, DataGrip 等。

连接到你的MySQL服务器

  1. 打开 MySQL Workbench。
  2. 点击主界面上的 号,创建一个新的连接。
  3. 在 "Setup New Connection" 窗口中:
    • Connection Name: 给你的连接起个名字,"Local MySQL"。
    • Hostname: 如果是连接本机,通常是 localhost0.0.1
    • Port: 默认是 3306
    • Username: 默认的管理员用户是 root,安装时如果没改过密码,这里可以为空。
  4. 点击 "Test Connection" 进行测试,如果成功,点击 "OK" 保存。
  5. 双击你创建的连接,即可进入MySQL主界面,在这里可以执行SQL语句。

第三部分:SQL语言基础

什么是SQL?

SQL(Structured Query Language,结构化查询语言)是一种专门用来与数据库通信的语言,我们所有的增删改查操作都是通过SQL语句来完成的。

SQL的分类

  • DDL (Data Definition Language - 数据定义语言):用于定义和管理数据库的结构。
    • CREATE (创建)
    • ALTER (修改)
    • DROP (删除)
  • DML (Data Manipulation Language - 数据操作语言):用于操作数据库中的数据。
    • INSERT (插入)
    • UPDATE (更新)
    • DELETE (删除)
  • DQL (Data Query Language - 数据查询语言):用于查询数据(这是最常用的部分)。
    • SELECT (查询)
  • DCL (Data Control Language - 数据控制语言):用于控制数据库的访问权限。
    • GRANT (授权)
    • REVOKE (撤销权限)

数据库操作

在 MySQL Workbench 的查询编辑器中执行以下语句:

-- 1. 创建一个名为 `mydb` 的数据库
CREATE DATABASE mydb;
-- 2. 查看所有数据库
SHOW DATABASES;
-- 3. 使用(切换到) `mydb` 数据库
USE mydb;
-- 4. 删除 `mydb` 数据库 (慎用!)
-- DROP DATABASE mydb;

表操作

我们将在 mydb 数据库中创建一个 students 表。

-- 1. 创建一个 `students` 表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT, -- id列,整数类型,主键,自动递增
    name VARCHAR(50) NOT NULL,         -- 姓名列,可变字符串,最大50,不能为空
    age INT,                           -- 年龄列,整数类型
    gender VARCHAR(10),                -- 性别列,可变字符串
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认为当前时间
);
-- 2. 查看 `mydb` 数据库中的所有表
SHOW TABLES;
-- 3. 查看 `students` 表的结构
DESC students;
-- 4. 删除 `students` 表 (慎用!)
-- DROP TABLE students;

第四部分:数据操作(增删改查)

这是SQL的核心,我们围绕 students 表进行操作。

CRUD:创建数据 (INSERT)

-- 插入一条完整的记录
INSERT INTO students (name, age, gender) VALUES ('张三', 18, '男');
-- 插入另一条记录
INSERT INTO students (name, age, gender) VALUES ('李四', 19, '女');
-- 插入多条记录
INSERT INTO students (name, age, gender) VALUES 
('王五', 20, '男'),
('赵六', 18, '女');

Read:查询数据 (SELECT)

-- 查询所有学生的所有信息
SELECT * FROM students;
-- 查询所有学生的姓名和年龄
SELECT name, age FROM students;
-- 查询所有学生的姓名和年龄,并为列起别名
SELECT name AS '学生姓名', age AS '学生年龄' FROM students;
-- 查询所有学生,按年龄降序排列(大的在前)
SELECT * FROM students ORDER BY age DESC;
-- 查询所有学生,按年龄升序排列(小的在前)
SELECT * FROM students ORDER BY age ASC;

Update:更新数据 (UPDATE)

注意:UPDATE 操作一定要加 WHERE 条件,否则会更新整个表!

-- 将 '张三' 的年龄改为 20
UPDATE students SET age = 20 WHERE name = '张三';
-- 将 '李四' 的年龄改为 21,性别改为 '男'
UPDATE students SET age = 21, gender = '男' WHERE name = '李四';

Delete:删除数据 (DELETE)

注意:DELETE 操作一定要加 WHERE 条件,否则会清空整个表!

-- 删除 '王五' 这条记录
DELETE FROM students WHERE name = '王五';
-- 删除年龄小于 19 的所有学生
DELETE FROM students WHERE age < 19;

第五部分:数据查询进阶

条件查询 (WHERE)

WHERE 子句用于过滤记录,常用运算符:

  • , 或 <> (不等于), >, <, >=, <=
  • AND (与), OR (或), NOT (非)
  • BETWEEN ... AND ... (在...之间)
  • IN (value1, value2, ...) (在列表中)
  • LIKE (模糊查询)
    • 代表任意多个字符
    • _:代表单个字符
-- 查询年龄等于 18 的学生
SELECT * FROM students WHERE age = 18;
-- 查询年龄大于 18 的男生
SELECT * FROM students WHERE age > 18 AND gender = '男';
-- 查询年龄在 18 到 20 之间的学生
SELECT * FROM students WHERE age BETWEEN 18 AND 20;
-- 查询姓名是 '张三' 或 '李四' 的学生
SELECT * FROM students WHERE name IN ('张三', '李四');
-- 查询所有姓 '张' 的学生
SELECT * FROM students WHERE name LIKE '张%';
-- 查询名字是两个字,且第一个字是 '张' 的学生
SELECT * FROM students WHERE name LIKE '张_';

排序 (ORDER BY)

-- 按年龄升序排列
SELECT * FROM students ORDER BY age ASC;
-- 先按性别升序排列,再按年龄降序排列
SELECT * FROM students ORDER BY gender ASC, age DESC;

聚合函数

对列进行计算,返回一个单一的值。

  • COUNT(): 计算数量
  • SUM(): 计算总和
  • AVG(): 计算平均值
  • MAX(): 计算最大值
  • MIN(): 计算最小值
-- 计算学生总数
SELECT COUNT(*) FROM students;
-- 计算所有学生的平均年龄
SELECT AVG(age) FROM students;
-- 计算最大年龄和最小年龄
SELECT MAX(age) AS max_age, MIN(age) AS min_age FROM students;

分组查询 (GROUP BY)

通常与聚合函数一起使用,用于将结果集按一个或多个列进行分组。

-- 创建一个 `scores` 表用于演示
CREATE TABLE scores (
    id INT PRIMARY KEY AUTO_INCREMENT,
    student_name VARCHAR(50),
    subject VARCHAR(50),
    score INT
);
INSERT INTO scores (student_name, subject, score) VALUES
('张三', '数学', 90),
('张三', '语文', 85),
('李四', '数学', 88),
('李四', '语文', 92),
('王五', '数学', 78),
('王五', '语文', 80);
-- 查询每个学生的平均成绩
SELECT student_name, AVG(score) AS average_score
FROM scores
GROUP BY student_name;
-- 查询每个科目(subject)的最高分
SELECT subject, MAX(score) AS highest_score
FROM scores
GROUP BY subject;

多表查询(JOIN

当数据分布在多个相关联的表中时,需要使用 JOIN 来合并查询结果。

假设我们有 studentsscores 两个表,它们通过 student_name 关联。

  • INNER JOIN (内连接):只返回两个表中匹配的记录。
  • LEFT JOIN (左连接):返回左表(FROM 指定的表)的所有记录,以及右表中匹配的记录,如果右表没有匹配,则结果中右表的列为 NULL
-- 内连接:查询每个学生的姓名和对应的成绩
SELECT s.name, sc.subject, sc.score
FROM students s
INNER JOIN scores sc ON s.name = sc.student_name;
-- 左连接:查询所有学生,即使他们没有成绩记录
SELECT s.name, sc.subject, sc.score
FROM students s
LEFT JOIN scores sc ON s.name = sc.student_name;

第六部分:数据类型与约束

常见数据类型

  • 数值类型
    • INT: 整数,如 age INT
    • DECIMAL(M, D): 精确的小数,M是总位数,D是小数位数,如 price DECIMAL(10, 2) 表示最多10位,其中2位是小数。
    • FLOAT: 单精度浮点数,不精确,用于科学计算。
  • 字符串类型
    • VARCHAR(N): 可变长度的字符串,N是最大长度,如 name VARCHAR(50),节省空间。
    • CHAR(N): 固定长度的字符串,N是长度,如 gender CHAR(1),查询速度更快。
  • 日期时间类型
    • DATE: 只存储日期,如 2025-10-27
    • DATETIME: 存储日期和时间,如 2025-10-27 10:30:00
    • TIMESTAMP: 存储时间戳,范围较小,常用于记录数据的创建和修改时间。

常见约束

约束是表中对列的强制规则,以保证数据的完整性和准确性。

  • PRIMARY KEY: 主键,唯一标识表中的每一行。不能为空,且唯一
  • FOREIGN KEY: 外键,用于在两个表之间建立链接,一个表中的外键指向另一个表的主键。
  • NOT NULL: 列不能为空。
  • UNIQUE: 列的值必须唯一,但可以为空。
  • DEFAULT: 为列设置默认值。
  • AUTO_INCREMENT: 自动递增,通常用于主键。

第七部分:索引与优化(入门)

什么是索引?

索引类似于书的目录,如果没有目录,要找到某个章节,你可能需要一页一页地翻,有了目录,你就可以快速定位到章节页码。

数据库索引就是一种提高查询效率的数据结构,它对表中的一列或多列进行排序,并创建一个指向这些值的指针。

为什么要用索引?

  • 加速查询:极大地提高了数据检索的速度,特别是对于大型表。
  • 保证唯一性:通过创建唯一索引,可以确保某列的数据是唯一的。

如何创建索引?

-- 为 students 表的 name 列创建一个普通索引
CREATE INDEX idx_name ON students (name);
-- 为 students 表的 age 和 gender 列创建一个复合索引
CREATE INDEX idx_age_gender ON students (age, gender);
-- 查看表的索引
SHOW INDEX FROM students;
-- 删除索引
DROP INDEX idx_name ON students;

索引的代价

  • 占用磁盘空间。
  • 在增加、删除、更新数据时,需要同时维护索引,会降低写操作的速度。

使用原则:只为经常用于 WHEREJOINORDER BY 子句的列创建索引。


第八部分:总结与学习路径

回顾

恭喜你!你已经完成了MySQL的入门学习,现在你应该掌握:

  • 数据库的基本概念。
  • 如何安装和配置MySQL环境。
  • 使用SQL进行数据库和表的基本操作。
  • 核心的 CRUD(增删改查)操作。
  • 使用 WHEREORDER BYGROUP BYJOIN 进行复杂查询。
  • 了解数据类型和约束的重要性。
  • 知道索引是什么以及为什么需要它。

下一步该学什么?

  • 事务:学习 BEGIN, COMMIT, ROLLBACK,理解ACID特性,确保数据操作的原子性。
  • 视图:学习创建虚拟表,简化复杂查询。
  • 存储过程和函数:学习编写可复用的SQL代码块。
  • 数据库设计:学习范式(1NF, 2NF, 3NF),设计出结构更合理、性能更好的数据库。
  • 权限管理:学习如何创建用户并分配不同的权限。
  • 实战项目:尝试用MySQL为你自己的小项目(如博客、待办事项列表)搭建后端数据库。

MySQL是一个庞大而强大的工具,本教程只是一个起点,保持好奇心,多动手实践,你将成为一名出色的数据库开发者!