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,一键安装:
- 下载 https://www.apachefriends.org → 安装 → 启动 Apache 和 MySQL
- 访问 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 会删除所有行!
🔥 易错:
UPDATE 和 DELETE 不带 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(断号不补)。
📖 小节
- 数据库 = 电子文件柜系统(持久存储 + 快速查找 + 并发安全)
CREATE DATABASE name;建库 →USE name;选库 →CREATE TABLE (...)- 常用类型:INT/VARCHAR/TEXT/DECIMAL/DATETIME/BOOLEAN
- PRIMARY KEY 唯一标识每行,AUTO_INCREMENT 自动编号
- CRUD 操作:INSERT/SELECT/UPDATE/DELETE
UPDATE/DELETE不加 WHERE 是核按钮⚠️- phpMyAdmin 可视化操作 MySQL
📝 作业
- 在 phpMyAdmin 中创建 myblog 数据库和 users 表(含 id/username/email/password/age/created_at),插入 5 条测试用户数据。
- 创建 posts 表(id/user_id/title/content/status/created_at),插入 3 条文章数据,用 SELECT 查询所有已发布(published)的文章。
- 用 UPDATE 修改某篇文章的标题,用 DELETE 删除某条过时的文章,验证结果。