PHP: MySQL数据库基础

前面 27 课的数据都在内存里——刷新就没了。数据库是数据的永久居所。这节课让你理解数据库是什么、怎么建表、怎么在 MySQL 中创建你的第一个数据库。

1. 什么是数据库?

数据库 = 有组织的电子文件柜系统。它比文本文件更擅长:快速查找、并发读写、数据完整性保障。

TEXT 📖 仅展示
数据库 Server(如 MySQL)
 ├── 数据库 "blog"          ← CREATE DATABASE blog;
 │    ├── 表 "users"         ← CREATE TABLE users (...)
 │    │    ├── 行:用户1      ← INSERT INTO users ...
 │    │    ├── 行:用户2
 │    │    └── 行:用户3
 │    ├── 表 "posts"
 │    └── 表 "comments"
 └── 数据库 "shop"
术语 类比 说明
数据库 Excel 文件 一个项目的数据容器
工作表 Sheet 存一类数据(用户表、文章表)
列(Column) 列 A、B、C... 一个字段(name、age)
行(Row) 一行记录 一条数据(张三,25)
主键(PK) 行号 唯一标识每行

2. MySQL 安装与连接

(1) Windows 用 XAMPP

XAMPP 自带 MySQL + phpMyAdmin,一键安装:

  1. 下载 https://www.apachefriends.org → 安装 → 启动 Apache 和 MySQL
  2. 访问 http://localhost/phpmyadmin

(2) 连接 MySQL

BASH
# 命令行连接
mysql -u root -p
# 默认 XAMPP 的 root 没有密码,直接回车
SQL
-- 查看已有数据库
SHOW DATABASES;

-- 安全起见,给 root 设个密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';

3. 创建数据库与表

▶ 示例:创建数据库

SQL
-- 创建数据库
CREATE DATABASE myblog;

-- 选择数据库
USE myblog;

-- 查看当前数据库
SELECT DATABASE();

-- 删除数据库(慎用!)
-- DROP DATABASE myblog;
▶ 试一试

▶ 示例:创建用户表

SQL
-- 创建用户表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    age INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 查看表结构
DESCRIBE users;
-- 或
SHOW COLUMNS FROM users;
▶ 试一试
语句 说明
AUTO_INCREMENT 自增,每新增一行自动+1
PRIMARY KEY 主键,唯一标识一行
NOT NULL 必填,不能为空
UNIQUE 唯一,不能重复
DEFAULT 默认值
CURRENT_TIMESTAMP 当前时间戳

4. MySQL 常用数据类型

类型 用途 示例
INT 整数 age INT → 25
BIGINT 大整数 view_count BIGINT → 1000000
FLOAT / DOUBLE 浮点数 price FLOAT → 19.99
DECIMAL(M,D) 精确小数(金额) price DECIMAL(10,2) → 19.99
VARCHAR(N) 变长字符串 name VARCHAR(50)
TEXT 长文本 content TEXT
DATE 日期 birthday DATE → 2026-06-29
DATETIME 日期时间 created_at DATETIME
TIMESTAMP 时间戳 updated_at TIMESTAMP
BOOLEAN 布尔(TINYINT(1)) is_active BOOLEAN → 1/0
ENUM 枚举(固定选项) status ENUM('active','banned')
JSON JSON 数据 metadata JSON
💡 提示: 金额一律用 DECIMAL,绝不用 FLOAT——浮点数有精度误差,算钱会少几分。


5. 基本 CRUD 操作

操作 SQL 语句 说明
增(Create) INSERT INTO table VALUES (...) 添加新行
查(Read) SELECT * FROM table WHERE ... 查询数据
改(Update) UPDATE table SET col=val WHERE ... 修改数据
删(Delete) DELETE FROM table WHERE ... 删除数据

▶ 示例:基本 CRUD

SQL
-- 插入数据
INSERT INTO users (username, email, password, age) VALUES
('小明', 'xiaoming@example.com', 'hashed_pw_1', 25),
('小红', 'xiaohong@example.com', 'hashed_pw_2', 22),
('小刚', 'xiaogang@example.com', 'hashed_pw_3', 28);

-- 查询
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 23;
SELECT COUNT(*) FROM users;                    -- 统计行数
SELECT * FROM users ORDER BY age DESC;         -- 按年龄降序
SELECT * FROM users LIMIT 2;                   -- 只查前2条

-- 更新
UPDATE users SET age = 26 WHERE username = '小明';
-- ⚠️ 忘记 WHERE 会更新所有行!

-- 删除
DELETE FROM users WHERE id = 3;
-- ⚠️ 忘记 WHERE 会删除所有行!
▶ 试一试
🔥 易错: UPDATEDELETE 不带 WHERE 会作用在所有行上!这是数据库操作的"核按钮"——执行前一定要确认 WHERE 条件。


6. phpMyAdmin 操作

phpMyAdmin 是图形化管理 MySQL 的工具,适合不熟悉命令行的新手:

TEXT 📖 仅展示
http://localhost/phpmyadmin

操作步骤:
1. 点击左侧 "新建" → 输入数据库名 myblog → 创建
2. 点击 myblog 数据库 → "SQL" 标签
3. 粘贴 CREATE TABLE 语句 → 执行
4. 点击表 users → "插入" 标签 → 填表单插入数据
5. "浏览" 标签 → 查看数据
6. "结构" 标签 → 查看/修改列定义
💡 提示: 初学阶段用 phpMyAdmin 可视化操作没问题,但后续课程(PDO)会教你用 PHP 代码操作数据库——那才是做 Web 应用的姿势。


7. 创建文章表

SQL
CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(200) NOT NULL,
    content TEXT NOT NULL,
    status ENUM('draft', 'published') DEFAULT 'draft',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
💡 提示: FOREIGN KEY (user_id) REFERENCES users(id) 确保文章的作者一定是存在的用户。ON DELETE CASCADE 表示删除用户时自动删除他的文章。

❓ 常见问题

Q MySQL 和 SQL 是什么关系?
A SQL 是语言(Structured Query Language),MySQL 是数据库管理系统(实现 SQL 语言的软件之一)。就像 JavaScript 是语言,Chrome 是运行它的浏览器。
Q VARCHAR 和 TEXT 怎么选?
A 短文本(≤255字符)用 VARCHAR,长文本用 TEXT。VARCHAR 可以设默认值,TEXT 不能。用户名、邮箱、标题用 VARCHAR,文章内容用 TEXT。
Q AUTO_INCREMENT 从几开始?
A 默认从 1 开始,每次 +1。删了最后一行再 INSERT,下一个 ID 是之前最大 ID+1(断号不补)。

📖 小节

📝 作业

  1. 在 phpMyAdmin 中创建 myblog 数据库和 users 表(含 id/username/email/password/age/created_at),插入 5 条测试用户数据。
  2. 创建 posts 表(id/user_id/title/content/status/created_at),插入 3 条文章数据,用 SELECT 查询所有已发布(published)的文章。
  3. 用 UPDATE 修改某篇文章的标题,用 DELETE 删除某条过时的文章,验证结果。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏