第一章 数据库基础认知
1.1 数据库在测试中的核心作用
- 数据验证:检查业务操作是否准确持久化
- 环境搭建:构建测试所需的初始数据状态
- 性能测试:评估数据库处理能力对系统影响
- 故障模拟:验证异常情况下的数据完整性
1.2 关系型数据库核心概念
表结构示例(用户信息表):
字段名 | 类型 | 约束 | 说明 |
---|---|---|---|
user_id | INT | PRIMARY KEY | 自增主键 |
username | VARCHAR(50) | NOT NULL | 用户名(唯一) |
create_time | DATETIME | DEFAULT NOW() | 记录创建时间 |
is_active | TINYINT(1) | DEFAULT 1 | 账户状态(0/1) |
数据关系类型:
- 一对一(用户表 ↔ 身份证表)
- 一对多(用户表 ↔ 订单表)
- 多对多(学生表 ↔ 课程表)
1.3 MySQL安装与配置(Windows环境)
详细安装步骤:
- 下载MySQL Community Server 8.0
- 选择"Developer Default"安装类型
- 设置root密码为Test_1234!(测试环境专用)
- 配置字符集为utf8mb4(支持emoji存储)
- 验证安装成功的三种方法:
- 命令行执行mysql -uroot -p
- 服务列表检查MySQL服务状态
- 运行SELECT @@version;查询版本
第二章 基础操作精讲
2.1 数据库操作四部曲
SQL
-- 1. 创建测试数据库
CREATE DATABASE test_system
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 2. 切换数据库
USE test_system;
-- 3. 删除数据库(慎用)
DROP DATABASE IF EXISTS legacy_system;
-- 4. 查看所有数据库
SHOW DATABASES;
2.2 表结构管理详解
创建用户表示例:
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password CHAR(64) NOT NULL COMMENT 'SHA256加密',
email VARCHAR(100) CHECK (email LIKE '%@%.%'),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_created (created_at)
) ENGINE=InnoDB;
字段修改操作:
-- 添加手机号字段
ALTER TABLE users
ADD mobile VARCHAR(20)
AFTER email
COMMENT '带国际区号的号码';
-- 修改字段类型
ALTER TABLE users
MODIFY username VARCHAR(60)
CHARACTER SET utf8mb4;
-- 删除无用字段
ALTER TABLE users
DROP COLUMN deprecated_field;
2.3 数据增删改查基础
插入数据:
-- 单条插入(指定字段)
INSERT INTO users (username, password, email)
VALUES ('tester01', SHA2('pass123', 256), 'tester1@example.com');
-- 批量插入(测试数据初始化)
INSERT INTO users (username, password, email) VALUES
('admin', SHA2('Admin@2023', 256), 'admin@system.com'),
('guest', SHA2('Guest_123', 256), 'guest@temp.org');
查询数据:
-- 基础查询(带条件过滤)
SELECT user_id, username, email
FROM users
WHERE created_at > '2023-01-01'
AND is_active = 1;
-- 分页查询(测试列表功能)
SELECT *
FROM users
ORDER BY user_id DESC
LIMIT 10 OFFSET 20;
更新数据:
-- 修改用户状态(测试禁用功能)
UPDATE users
SET is_active = 0,
updated_at = NOW()
WHERE username = 'expired_user';
-- 批量重置密码(测试数据恢复)
UPDATE users
SET password = SHA2('Temp_123', 256)
WHERE email LIKE '%@testdomain.com';
删除数据:
-- 条件删除(测试数据清理)
DELETE FROM temp_logs
WHERE created_at < '2022-01-01';
-- 全表删除(慎用)
TRUNCATE TABLE debug_records;
第三章 查询进阶技巧
3.1 条件查询的十二种武器
比较运算符:
SELECT * FROM products
WHERE price > 100
AND stock <= 50;
范围查询:
SELECT order_id
FROM orders
WHERE amount BETWEEN 500 AND 1000;
空值处理:
SELECT username
FROM users
WHERE mobile IS NULL;
模糊匹配:
SELECT product_name
FROM items
WHERE description LIKE '%防水%';
3.2 多表关联查询详解
内连接示例:
SELECT u.username, o.order_no, o.amount
FROM users u
INNER JOIN orders o ON u.user_id = o.user_id
WHERE o.status = 'completed';
左连接案例:
SELECT d.dept_name, COUNT(e.emp_id) AS emp_count
FROM departments d
LEFT JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
3.3 聚合函数实战
-- 基础统计(测试报表功能)
SELECT
COUNT(*) AS total_users,
MAX(created_at) AS latest_create,
MIN(login_time) AS earliest_login
FROM users;
-- 分组统计(测试数据聚合)
SELECT
DATE(created_at) AS create_date,
COUNT(*) AS daily_new_users
FROM users
GROUP BY create_date
HAVING daily_new_users > 10;
第四章 测试数据管理(1500字)
### 4.1 测试数据生成策略
**随机数据生成:**
```SQL
INSERT INTO test_data (name, age, score)
SELECT
CONCAT('user', FLOOR(RAND()*100000)),
FLOOR(18 + RAND()*50),
ROUND(RAND()*100, 2)
FROM information_schema.tables
LIMIT 1000;
第四章 测试数据管理
4.1 测试数据生成策略
随机数据生成:
INSERT INTO test_data (name, age, score)
SELECT
CONCAT('user', FLOOR(RAND()*100000)),
FLOOR(18 + RAND()*50),
ROUND(RAND()*100, 2)
FROM information_schema.tables
LIMIT 1000;
4.2 数据版本管理
备份与恢复:
-- 创建数据快照
CREATE TABLE users_backup_202309 AS
SELECT * FROM users;
-- 恢复指定版本
TRUNCATE TABLE users;
INSERT INTO users SELECT * FROM users_backup_202309;
4.3 数据质量检查
完整性验证:
-- 检查外键约束
SELECT *
FROM orders o
LEFT JOIN users u ON o.user_id = u.user_id
WHERE u.user_id IS NULL;
第五章 事务与锁机制
5.1 事务基础操作
START TRANSACTION;
UPDATE account
SET balance = balance - 500
WHERE user_id = 1001;
UPDATE account
SET balance = balance + 500
WHERE user_id = 1002;
COMMIT;
5.2 锁机制测试场景
-- 悲观锁测试
SELECT * FROM inventory
WHERE product_id = 1005
FOR UPDATE;
-- 乐观锁实现
UPDATE products
SET stock = stock - 1,
version = version + 1
WHERE product_id = 1005
AND version = 5;
第六章 性能优化基础
6.1 索引优化实践
-- 创建组合索引
ALTER TABLE orders
ADD INDEX idx_status_user (status, user_id);
-- 分析索引使用
EXPLAIN
SELECT *
FROM orders
WHERE status = 'shipped'
AND user_id = 12345;
6.2 慢查询分析方法
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
-- 分析执行计划
EXPLAIN ANALYZE
SELECT *
FROM users
WHERE YEAR(created_at) = 2023;
第七章 测试场景实战
7.1 注册功能测试
-- 验证用户唯一性
SELECT COUNT(*)
FROM users
WHERE username = 'new_user'
OR email = 'new@example.com';
-- 测试并发注册
START TRANSACTION;
INSERT INTO users (...) VALUES (...);
COMMIT;
7.2 订单支付测试
-- 验证金额准确性
SELECT SUM(price * quantity) AS total
FROM order_items
WHERE order_id = 10086;
-- 测试库存扣减
UPDATE products
SET stock = stock - 1
WHERE product_id = 2001
AND stock > 0;
结语与学习建议
通过本指南的系统学习,测试工程师可以:
- 独立完成测试环境数据库搭建
- 熟练执行各种数据验证操作
- 设计全面的数据测试用例
- 分析解决常见数据相关问题
进阶学习方向:
- 数据库性能压测工具(如sysbench)
- 数据迁移验证策略
- 云数据库测试方法
- 自动化测试框架集成