《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-1

第 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 email 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)

  1. 访问官网:前往 [MySQL 官网下载页面](https:// dev.mysql.com/downloads/installer/)。
  2. 选择安装包:下载体积较小的"MySQL Installer (web community)"在线安装包。
  3. 运行安装程序
  • 选择安装类型为"Custom"(自定义),以便选择需要组件。
  • 在"Select Products and Features"页面,从左侧列表找到MySQL Server(例如 8.0.xx 版本),点击箭头添加到右侧。
  • 可同时添加MySQL Workbench(图形工具)和MySQL Shell(高级命令行)。
  • 一路点击"Next",执行安装。
  1. 产品配置
  • 服务器配置类型选择"Development Computer"。
  • 身份验证方法强烈建议选择"Use Strong Password Encryption for Authentication (RECOMMENDED)"
  • root用户设置一个强密码并务必牢记 (例如:MyStrongPass123!)。
  • 记住 Windows 服务名,默认为MySQL80
  • 完成配置,执行应用。
    macOS 系统 (使用 Homebrew)
  1. 安装 Homebrew:如果未安装,在终端执行:
bash 复制代码
    /bin/bash -c "$(curl -fsSL https:// raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 安装 MySQL:打开终端,执行以下命令。
bash 复制代码
    brew install mysql
  1. 启动 MySQL 服务
bash 复制代码
    brew services start mysql
  1. 安全初始化与设置 root 密码:MySQL 安装后 root 用户可能无密码,需运行安全脚本。
bash 复制代码
    mysql_secure_installation
复制代码
*   根据提示操作:建议启用"VALIDATE PASSWORD"组件,然后为root用户设置强密码,并移除匿名用户、禁止root远程登录等。
第二步:安装图形化客户端 - MySQL Workbench (推荐)
  • 下载:在[MySQL Workbench 下载页面](https:// dev.mysql.com/downloads/workbench/)选择对应操作系统的版本下载安装。
  • 作用:提供可视化界面管理数据库、执行 SQL、设计表结构,极大提升学习和开发效率。
第三步:环境验证与首次连接

方法一:使用命令行连接(通用)

  1. 打开终端(macOS/Linux)或命令提示符/PowerShell(Windows)。
  2. 使用mysql -u root -p命令连接。
bash 复制代码
    # 连接命令,-u后接用户名,-p表示需要输入密码
mysql -u root -p
  1. 回车后,在提示符下输入您在安装时设置的 root 用户密码。
  2. 如果成功,您将看到 MySQL 的命令行提示符:mysql>

方法二:使用 MySQL Workbench 连接

  1. 打开 MySQL Workbench。
  2. 在主界面"MySQL Connections"旁点击"+"号,新建连接。
  3. 设置连接参数:
  • Connection Name: Local MySQL (自定义)
    • Hostname: 127.0.0.1localhost
    • Port: 3306 (默认)
    • Username: root
    • 点击"Store in Vault..."输入并保存密码。
  1. 点击"Test Connection",提示成功后再点击"OK"保存。
  2. 双击新建的连接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 中操作:

  1. 在左侧"SCHEMAS"面板区域右键,选择"Create Schema..."。
  2. 在弹出的窗口中,输入数据库名称php_learn_db
  3. 在"Charset/Collation"下拉框中,选择utf8mb4utf8mb4_unicode_ci
  4. 点击"Apply",在确认窗口再次点击"Apply"和"Finish"。
  5. 刷新后,即可在"SCHEMAS"列表看到新建的数据库。

项目测试与部署指南

  • 测试 :环境搭建成功的唯一标准是能够通过至少一种方式(命令行或 Workbench)连接到 MySQL 服务器,并能成功执行CREATE DATABASE语句。
  • 部署(针对本地开发):本章环境仅用于本地学习和开发。如需部署到线上服务器,流程类似,但需额外关注网络安全配置(如防火墙规则、非 root 用户权限、绑定 IP 地址等),这超出了入门范围。

项目扩展建议

  1. 尝试使用DROP DATABASE php_learn_db;命令删除刚创建的数据库,然后再重新创建它。(小心操作,此命令会永久删除数据库及其所有数据)。
  2. 在 MySQL Workbench 中探索其界面:尝试在php_learn_db下创建一张简单的表,或在查询编辑器(Query Tab)中手动输入并执行上面的 SQL 命令。

最佳实践与安全考虑

1. 安装与配置最佳实践

  • 版本选择:初学者选择最新的稳定版(如 MySQL 8.0)即可,它包含最新的功能和安全修复。
  • 密码强度 :为 root 账户设置高强度密码(大小写字母、数字、特殊符号组合,长度大于 12 位),切勿使用123456root等弱密码。
  • 专用账户 :在实际项目中,绝不使用 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 服务,并尝试用默认密码或常见弱密码字典进行爆破攻击。一旦成功,攻击者便拥有了数据库的最高权限。
  • 防护方案
  1. 强密码:如前所述,设置复杂密码。
  2. 禁止远程 root 登录 :在安装配置或使用mysql_secure_installation脚本时,选择禁止 root 用户从远程主机登录。
  3. 修改默认端口:可以考虑将 MySQL 服务端口从默认的 3306 改为其他端口,增加攻击者扫描的难度。(对于本地开发,此步非必需)
  4. 防火墙:确保生产服务器的防火墙仅允许可信 IP 地址访问数据库端口。

3. 开发效率建议

  • 掌握图形化工具:虽然学习命令行很重要,但熟练使用 MySQL Workbench 等工具可以大幅提升建表、调试 SQL 的效率。
  • 字符集统一 :为避免中文乱码问题,养成习惯,在创建数据库和表时,显式指定字符集为utf8mb4,排序规则为utf8mb4_unicode_ciutf8mb4utf8的超集,完全支持所有 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;

练习题与挑战

基础练习题

  1. 【难度:★☆☆☆☆】概念辨析
    • 题目:请用自己的话解释"数据库"、"表"、"行"、"列"之间的关系,并类比一个生活中的例子(如学校、公司)。
  • 提示:想想学校这个"数据库"里,可能有"学生表"、"课程表"。每个表有列(如学号、姓名),每行是一个具体学生的信息。
  1. 【难度:★☆☆☆☆】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

进阶练习题

  1. 【难度:★★☆☆☆】动手创建
    • 题目:请在您的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
        );
  1. 【难度:★★☆☆☆】字符集调查
    • 题目:使用SHOW CREATE DATABASE php_learn_db;命令,查看您之前创建的数据库的完整定义语句。记录下它使用的字符集(CHARACTER SET)和排序规则(COLLATION)。思考为什么我们推荐使用utf8mb4utf8mb4_unicode_ci

综合挑战题

  1. 【难度:★★★☆☆】环境检查与报告
    • 题目:编写一份简单的"MySQL 学习环境自查报告"。要求:
  2. 通过命令行登录 MySQL,并执行SELECT VERSION();,记录您的 MySQL 版本号。
  3. 执行SHOW DATABASES;,列出所有数据库,并截图或记录。
  4. 在 MySQL Workbench 中成功连接到本地服务器,并打开一个新的查询标签页(Query Tab)。
  5. 在 Workbench 中,用 SQL 语句创建一个名为my_test的数据库,并设置字符集为utf8mb4
  6. 在该数据库中,尝试创建[进阶练习题 3]中的book表。
  7. (选做)在 Workbench 中,尝试通过图形界面(而非 SQL)删除my_test数据库。
  • 提示:这个挑战旨在确保您熟悉两种操作方式,并能完成从连接到创建的基本流程。

章节总结

本章重点知识回顾

  1. 核心概念 :理解了数据库作为持久化、有组织的数据集合 的核心价值,以及 MySQL 作为 RDBMS 的作用。掌握了表、行、列、主键等关系型数据库的基本术语。
  2. 环境搭建:学会了在 Windows 和 macOS 系统上安装和配置 MySQL 服务器及客户端工具(MySQL Workbench)。
  3. 基础操作 :掌握了通过命令行图形化工具 两种方式连接 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 章前:

  1. 多练习:反复进行"创建数据库 -> 删除数据库"的操作,熟悉命令行的交互。
  2. 熟悉 Workbench:花点时间浏览 MySQL Workbench 的各个面板,特别是"SCHEMAS"(管理数据库和表)和用于输入 SQL 的查询编辑器。
  3. 预习 :思考一下,如果让您设计一个users表来保存网站用户信息,您会设置哪些"列"(字段)?试着在纸上画出来。这将是第 2 章实战的起点。
相关推荐
云半S一1 小时前
春招准备之Redis篇
数据库·经验分享·redis·笔记·缓存
移远通信1 小时前
配网-复杂场景
服务器·开发语言·php
康不坦丁1 小时前
MySQL 的 order by 简化(使用列序号和列别名排序)
后端·mysql
IndulgeCui1 小时前
【金仓数据库产品体验官】KingbaseES-性能优化深度体验
数据库·性能优化
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue零食商城管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
雨中飘荡的记忆1 小时前
Redis_实战指南
数据库·redis·缓存
('-')2 小时前
《从根上理解MySQL是怎样运行的》第二十五章笔记
数据库·笔记·mysql
尽兴-2 小时前
问题记录:数据库字段 `CHAR(n)` 导致前端返回值带空格的排查与修复
前端·数据库·mysql·oracle·达梦·varchar·char
Cat God 0072 小时前
MySQL-查漏补缺版(六:MySQL-优化)
android·数据库·mysql