第 1 章:初识 MySQL:数据库概念、安装与环境搭建
章节介绍
本章学习目标
本章旨在帮助零基础的 PHP 开发者理解数据库的核心作用,掌握关系型数据库的基本概念,并成功在本地计算机上搭建起 MySQL 开发环境。通过本章学习,您将能够独立安装 MySQL 服务器与客户端工具,建立数据库连接,并创建您的第一个数据库,为后续学习 SQL 语言和 PHP 操作数据库打下坚实的基础。
在教程中的作用
本模块是《零基础学 PHP:从入门到实战》教程中承前启后的关键一环。在学习了 PHP 基础语法、表单处理等技能后,您编写的程序还缺乏"记忆"能力------数据无法持久化保存。本章及整个模块将为您解开"数据驱动"Web 应用的神秘面纱。MySQL 作为 PHP 生态中最经典的搭档,学会使用它是您从编写静态脚本迈向开发动态网站(如博客、论坛、内容管理系统)的必经之路。
与前面章节的衔接
前序模块中,您已经学会了使用 PHP 处理用户通过表单提交的数据。例如,您可以获取用户注册时填写的用户名和邮箱。但这些数据仅存在于脚本执行期间的内存中,页面刷新后便会消失。本章引入的 MySQL 数据库,正是为了解决数据的持久化存储问题。未来,您将把表单提交的数据,通过 PHP 安全地保存到 MySQL 数据库中。
本章主要内容概览
本章将首先澄清"数据库"是什么以及我们为什么需要它。然后,我们会学习关系型数据库的核心术语(如表、行、列)。接着,是核心的实践环节:详细讲解在 Windows 和 macOS 系统下如何安装 MySQL 服务器和图形化管理工具 MySQL Workbench。最后,我们将使用命令行和图形化工具两种方式,连接 MySQL 服务器并创建第一个练习用的数据库。
核心概念讲解
1. 数据库是什么?为什么需要它?
想象一下一个图书馆。图书馆本身就是一个"数据库",书库中的一本本书就是"数据"。如果没有图书馆,书籍会散落在各处,难以查找和管理。数据库之于 Web 应用,就如同图书馆之于书籍。
- 定义 :数据库(Database)是一个长期存储在计算机内、有组织的、可共享的、统一管理的数据集合。
- 作用:
- 持久化存储:将程序运行中产生的数据(如用户信息、文章内容、订单记录)永久保存在硬盘上,即使服务器重启也不会丢失。
- 高效管理:提供结构化存储和高效检索机制,可以从海量数据中快速找到所需信息(类似图书馆的索引系统)。
- 数据共享与安全:支持多个应用程序或用户安全地并发访问和操作同一批数据,并通过权限控制保障数据安全。
2. 关系型数据库管理系统(RDBMS)与 MySQL
- RDBMS:是管理关系型数据库的软件系统。它就像图书馆的管理系统,负责建立书库(数据库)、定义书籍分类规则(表结构)、处理借阅和归还(增删改查操作)。常见的 RDBMS 有 MySQL、PostgreSQL、SQL Server、Oracle 等。
- MySQL :是一个开源、免费、高性能、可靠性高的关系型数据库管理系统。它因其与 PHP、Apache 组成的经典"LAMP"栈而风靡 Web 开发领域,拥有极佳的社区支持和丰富的学习资源,是初学者的理想选择。
3. 核心术语解析(以"用户表"为例)
理解这些术语是后续学习 SQL 的基石。我们以一个存储用户信息的users表为例:
| id | username | created_at | |
|---|---|---|---|
| 1 | zhangsan | zhangsan@email.com | 2023-10-01 09:00:00 |
| 2 | lisi | lisi@email.com | 2023-10-02 10:30:00 |
- 表(Table) :数据存储的基本单位,用于存储特定类型实体的数据。如上图所示的
users表,专门存储用户信息。一个数据库中可以有多张表(如articles,products)。 - 列(Column)/ 字段(Field) :表的属性,定义了表中存储数据的类型和结构。例如
username列存储字符串类型的用户名,created_at列存储日期时间类型的创建时间。每列都有特定的数据类型(如整数 INT、字符串 VARCHAR)。 - 行(Row)/ 记录(Record) :表中的一个具体数据项。表中的每一行代表一个独立的实体或对象。例如,第一行
(1, 'zhangsan', ...)代表用户"zhangsan"的完整记录。 - 主键(Primary Key) :表中唯一标识 每一行记录的列(或列的组合)。
id列通常被设为主键。其值必须唯一且非空,确保能精准定位到任何一条记录。 - 外键(Foreign Key) :用于建立表与表之间关联的列。它指向另一张表的主键 。例如,
articles表中可能有一个author_id列(外键),其值对应于users表中的某个id(主键),从而将文章与作者关联起来。(外键的详细使用将在第 5 章讲解)
实战项目:学习环境搭建与验证
项目需求
完成本地 MySQL 开发环境的搭建,并通过两种方式(命令行和图形化工具)验证安装成功,最终创建一个名为php_learn_db的练习数据库。
技术方案与分步实现
第一步:安装 MySQL 服务器
Windows 系统 (使用 MySQL Installer)
- 访问官网:前往 [MySQL 官网下载页面](https:// dev.mysql.com/downloads/installer/)。
- 选择安装包:下载体积较小的"MySQL Installer (web community)"在线安装包。
- 运行安装程序:
- 选择安装类型为"Custom"(自定义),以便选择需要组件。
- 在"Select Products and Features"页面,从左侧列表找到
MySQL Server(例如 8.0.xx 版本),点击箭头添加到右侧。 - 可同时添加
MySQL Workbench(图形工具)和MySQL Shell(高级命令行)。 - 一路点击"Next",执行安装。
- 产品配置:
- 服务器配置类型选择"Development Computer"。
- 身份验证方法强烈建议选择"Use Strong Password Encryption for Authentication (RECOMMENDED)"。
- 为
root用户设置一个强密码并务必牢记 (例如:MyStrongPass123!)。 - 记住 Windows 服务名,默认为
MySQL80。 - 完成配置,执行应用。
macOS 系统 (使用 Homebrew)
- 安装 Homebrew:如果未安装,在终端执行:
bash
/bin/bash -c "$(curl -fsSL https:// raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装 MySQL:打开终端,执行以下命令。
bash
brew install mysql
- 启动 MySQL 服务:
bash
brew services start mysql
- 安全初始化与设置 root 密码:MySQL 安装后 root 用户可能无密码,需运行安全脚本。
bash
mysql_secure_installation
* 根据提示操作:建议启用"VALIDATE PASSWORD"组件,然后为root用户设置强密码,并移除匿名用户、禁止root远程登录等。
第二步:安装图形化客户端 - MySQL Workbench (推荐)
- 下载:在[MySQL Workbench 下载页面](https:// dev.mysql.com/downloads/workbench/)选择对应操作系统的版本下载安装。
- 作用:提供可视化界面管理数据库、执行 SQL、设计表结构,极大提升学习和开发效率。
第三步:环境验证与首次连接
方法一:使用命令行连接(通用)
- 打开终端(macOS/Linux)或命令提示符/PowerShell(Windows)。
- 使用
mysql -u root -p命令连接。
bash
# 连接命令,-u后接用户名,-p表示需要输入密码
mysql -u root -p
- 回车后,在提示符下输入您在安装时设置的 root 用户密码。
- 如果成功,您将看到 MySQL 的命令行提示符:
mysql>
方法二:使用 MySQL Workbench 连接
- 打开 MySQL Workbench。
- 在主界面"MySQL Connections"旁点击"+"号,新建连接。
- 设置连接参数:
- Connection Name:
Local MySQL(自定义)- Hostname:
127.0.0.1或localhost - Port:
3306(默认) - Username:
root - 点击"Store in Vault..."输入并保存密码。
- Hostname:
- 点击"Test Connection",提示成功后再点击"OK"保存。
- 双击新建的连接
Local MySQL,即可进入图形化操作界面。
第四步:创建第一个数据库
无论使用哪种客户端,我们的目标都是执行 SQL 命令。
在命令行中操作:
sql
-- 1. 查看当前已有数据库
SHOW DATABASES;
-- 2. 创建我们的练习数据库,指定字符集为utf8mb4以支持中文和所有Unicode字符
CREATE DATABASE php_learn_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 3. 再次查看数据库,确认创建成功
SHOW DATABASES;
预期输出中应包含information_schema, mysql, performance_schema, sys (系统库) 以及我们新建的 php_learn_db。
在 MySQL Workbench 中操作:
- 在左侧"SCHEMAS"面板区域右键,选择"Create Schema..."。
- 在弹出的窗口中,输入数据库名称
php_learn_db。 - 在"Charset/Collation"下拉框中,选择
utf8mb4和utf8mb4_unicode_ci。 - 点击"Apply",在确认窗口再次点击"Apply"和"Finish"。
- 刷新后,即可在"SCHEMAS"列表看到新建的数据库。
项目测试与部署指南
- 测试 :环境搭建成功的唯一标准是能够通过至少一种方式(命令行或 Workbench)连接到 MySQL 服务器,并能成功执行
CREATE DATABASE语句。 - 部署(针对本地开发):本章环境仅用于本地学习和开发。如需部署到线上服务器,流程类似,但需额外关注网络安全配置(如防火墙规则、非 root 用户权限、绑定 IP 地址等),这超出了入门范围。
项目扩展建议
- 尝试使用
DROP DATABASE php_learn_db;命令删除刚创建的数据库,然后再重新创建它。(小心操作,此命令会永久删除数据库及其所有数据)。 - 在 MySQL Workbench 中探索其界面:尝试在
php_learn_db下创建一张简单的表,或在查询编辑器(Query Tab)中手动输入并执行上面的 SQL 命令。
最佳实践与安全考虑
1. 安装与配置最佳实践
- 版本选择:初学者选择最新的稳定版(如 MySQL 8.0)即可,它包含最新的功能和安全修复。
- 密码强度 :为 root 账户设置高强度密码(大小写字母、数字、特殊符号组合,长度大于 12 位),切勿使用
123456、root等弱密码。 - 专用账户 :在实际项目中,绝不使用 root 账户连接应用程序。应为每个应用创建独立的数据库用户,并授予其最小必需的权限(例如,只对特定数据库有增删改查权)。这符合"最小权限原则",即使应用代码存在漏洞,攻击者能造成的破坏也有限。
sql
-- 创建专用用户的示例(在后续章节会详细学习)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'AnotherStrongPass!';
GRANT ALL PRIVILEGES ON php_learn_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
2. 安全漏洞案例:默认配置与弱密码
- 案例:许多初学者甚至在生产环境中,使用 MySQL 的默认配置和弱密码。攻击者可以通过互联网扫描开放了 3306 端口的 MySQL 服务,并尝试用默认密码或常见弱密码字典进行爆破攻击。一旦成功,攻击者便拥有了数据库的最高权限。
- 防护方案:
- 强密码:如前所述,设置复杂密码。
- 禁止远程 root 登录 :在安装配置或使用
mysql_secure_installation脚本时,选择禁止 root 用户从远程主机登录。 - 修改默认端口:可以考虑将 MySQL 服务端口从默认的 3306 改为其他端口,增加攻击者扫描的难度。(对于本地开发,此步非必需)
- 防火墙:确保生产服务器的防火墙仅允许可信 IP 地址访问数据库端口。
3. 开发效率建议
- 掌握图形化工具:虽然学习命令行很重要,但熟练使用 MySQL Workbench 等工具可以大幅提升建表、调试 SQL 的效率。
- 字符集统一 :为避免中文乱码问题,养成习惯,在创建数据库和表时,显式指定字符集为
utf8mb4,排序规则为utf8mb4_unicode_ci。utf8mb4是utf8的超集,完全支持所有 Unicode 字符,包括表情符号。
代码示例
以下示例均在 MySQL 命令行或 Workbench 的查询编辑器中执行。
示例 1:查看系统数据库
sql
-- 展示MySQL服务器上所有的数据库
SHOW DATABASES;
预期输出(可能因版本略有差异):
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
示例 2:创建并选择使用数据库
sql
-- 如果数据库已存在,先删除(仅用于练习,谨慎操作)
DROP DATABASE IF EXISTS test_demo;
-- 创建数据库,并指定字符集
CREATE DATABASE test_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 切换到新创建的数据库。后续所有操作(如表创建)默认都在此数据库中进行
USE test_demo;
-- 验证当前使用的数据库
SELECT DATABASE();
预期输出:
+-------------+
| DATABASE() |
+-------------+
| test_demo |
+-------------+
示例 3:创建简单的数据表
sql
-- 确保已使用 'USE test_demo;' 或在此语句前指定数据库
CREATE TABLE simple_user (
id INT, -- 整数类型的id字段
name VARCHAR(50) -- 最大长度50的可变字符串类型字段,用于存储名字
);
示例 4:查看表结构与删除表
sql
-- 查看 test_demo 数据库中的所有表
SHOW TABLES;
-- 查看 simple_user 表的详细结构定义
DESCRIBE simple_user;
-- 或使用缩写
DESC simple_user;
-- 删除表(此操作将永久删除表及其中所有数据)
DROP TABLE simple_user;
示例 5:完整的数据库生命周期操作(综合练习)
sql
-- 1. 列出所有数据库,确认当前环境
SHOW DATABASES;
-- 2. 创建一个专门用于练习的数据库,并指定字符集
CREATE DATABASE chapter1_practice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 3. 使用这个数据库
USE chapter1_practice;
-- 4. 创建一张存储学生信息表
CREATE TABLE student (
stu_id INT, -- 学号
stu_name VARCHAR(100), -- 学生姓名
enrollment_date DATE -- 入学日期,DATE类型只存储年月日
);
-- 5. 查看创建好的表
SHOW TABLES;
DESC student;
-- 6. (清理)删除整个练习数据库及其所有内容
-- 首先切换回其他数据库,不能删除当前正在使用的数据库
USE mysql; -- 切换到系统数据库
DROP DATABASE chapter1_practice;
-- 7. 再次查看所有数据库,确认 chapter1_practice 已消失
SHOW DATABASES;
练习题与挑战
基础练习题
- 【难度:★☆☆☆☆】概念辨析
- 题目:请用自己的话解释"数据库"、"表"、"行"、"列"之间的关系,并类比一个生活中的例子(如学校、公司)。
- 提示:想想学校这个"数据库"里,可能有"学生表"、"课程表"。每个表有列(如学号、姓名),每行是一个具体学生的信息。
- 【难度:★☆☆☆☆】SQL 语句识别
- 题目:本章我们接触了
SHOW DATABASES;,CREATE DATABASE,USE,CREATE TABLE,DROP TABLE,DROP DATABASE等 SQL 命令。请将它们按功能分为两类:一类用于管理数据库本身 ,另一类用于管理数据库中的表。
- 题目:本章我们接触了
- 参考答案:
- 管理数据库:
SHOW DATABASES;,CREATE DATABASE,USE,DROP DATABASE* 管理表:CREATE TABLE,DROP TABLE,SHOW TABLES,DESCRIBE
进阶练习题
- 【难度:★★☆☆☆】动手创建
- 题目:请在您的
php_learn_db数据库中,创建一张名为book的表,用于存储图书信息。要求包含以下字段:id(整数),title(书名,字符串),author(作者,字符串),price(价格,带小数的数字),publish_date(出版日期,日期类型)。请写出完整的 SQL 语句。
- 题目:请在您的
- 提示:数字类型可考虑
DECIMAL(10, 2),表示总共 10 位,其中 2 位是小数。日期类型用DATE。 - 参考语句:
sql
USE php_learn_db;
CREATE TABLE book (
id INT,
title VARCHAR(200),
author VARCHAR(100),
price DECIMAL(10, 2),
publish_date DATE
);
- 【难度:★★☆☆☆】字符集调查
- 题目:使用
SHOW CREATE DATABASE php_learn_db;命令,查看您之前创建的数据库的完整定义语句。记录下它使用的字符集(CHARACTER SET)和排序规则(COLLATION)。思考为什么我们推荐使用utf8mb4和utf8mb4_unicode_ci?
- 题目:使用
综合挑战题
- 【难度:★★★☆☆】环境检查与报告
- 题目:编写一份简单的"MySQL 学习环境自查报告"。要求:
- 通过命令行登录 MySQL,并执行
SELECT VERSION();,记录您的 MySQL 版本号。 - 执行
SHOW DATABASES;,列出所有数据库,并截图或记录。 - 在 MySQL Workbench 中成功连接到本地服务器,并打开一个新的查询标签页(Query Tab)。
- 在 Workbench 中,用 SQL 语句创建一个名为
my_test的数据库,并设置字符集为utf8mb4。 - 在该数据库中,尝试创建[进阶练习题 3]中的
book表。 - (选做)在 Workbench 中,尝试通过图形界面(而非 SQL)删除
my_test数据库。
- 提示:这个挑战旨在确保您熟悉两种操作方式,并能完成从连接到创建的基本流程。
章节总结
本章重点知识回顾
- 核心概念 :理解了数据库作为持久化、有组织的数据集合 的核心价值,以及 MySQL 作为 RDBMS 的作用。掌握了表、行、列、主键等关系型数据库的基本术语。
- 环境搭建:学会了在 Windows 和 macOS 系统上安装和配置 MySQL 服务器及客户端工具(MySQL Workbench)。
- 基础操作 :掌握了通过命令行 和图形化工具 两种方式连接 MySQL 服务器。学会了使用
CREATE DATABASE语句创建数据库,并理解了为支持中文而设置utf8mb4字符集的重要性。初步接触了SHOW,USE,CREATE TABLE,DROP等基础 SQL 命令。
技能掌握要求
完成本章学习后,您应该能够:
- 清晰说出数据库在 Web 开发中的必要性。
- 在本地计算机上成功安装并启动 MySQL 服务。
- 使用
mysql -u root -p命令或 MySQL Workbench 连接到本地的 MySQL 服务器。 - 执行 SQL 语句创建一个指定了
utf8mb4字符集的新数据库。 - 知道如何使用
SHOW DATABASES;和USE database_name;命令。
进一步学习建议
您已经成功踏入了数据库世界的大门!下一章,我们将深入 SQL 语言的核心------数据表操作(CRUD)。建议您在进入第 2 章前:
- 多练习:反复进行"创建数据库 -> 删除数据库"的操作,熟悉命令行的交互。
- 熟悉 Workbench:花点时间浏览 MySQL Workbench 的各个面板,特别是"SCHEMAS"(管理数据库和表)和用于输入 SQL 的查询编辑器。
- 预习 :思考一下,如果让您设计一个
users表来保存网站用户信息,您会设置哪些"列"(字段)?试着在纸上画出来。这将是第 2 章实战的起点。