📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
SQL场景,覆盖数据查询、操作、分析全流程,并提供可直接复用的代码示例。
一、基础数据操作(CRUD)
1. 数据查询
-- 查询所有字段(测试环境慎用)
SELECT * FROM users;
-- 条件筛选(测试用例数据校验)
SELECT order_id, amount FROM orders
WHERE status = 'paid' AND create_time >= '2024-01-01';
-- 去重查询(验证唯一性约束)
SELECT DISTINCT product_id FROM order_items;
-- 分页查询(性能测试数据准备)
SELECT * FROM logs
ORDER BY id DESC
LIMIT 20 OFFSET 40; -- MySQL写法
-- OFFSET 40 ROWS FETCH NEXT 20 ROWS ONLY; -- SQL Server
2. 数据插入
-- 插入单条测试数据
INSERT INTO products (name, price, stock)
VALUES ('测试商品', 99.9, 100);
-- 批量插入性能测试数据
INSERT INTO users (username, email)
VALUES
('user1', 'user1@test.com'),
('user2', 'user2@test.com'),
('user3', 'user3@test.com');
3. 数据更新
-- 更新指定记录(测试后数据清理)
UPDATE orders
SET status = 'canceled'
WHERE user_id = 1001 AND status = 'pending';
-- 关联更新(跨表数据修复)
UPDATE order_items oi
JOIN products p ON oi.product_id = p.id
SET oi.price = p.price * 0.9
WHERE p.category = 'clearance';
4. 数据删除
-- 删除测试产生的临时数据
DELETE FROM temp_cart
WHERE create_time < DATE_SUB(NOW(), INTERVAL 1 DAY);
-- 全表删除(测试环境初始化)
TRUNCATE TABLE debug_logs; -- 比DELETE更快且不记录日志
二、高级查询技巧
1. 表连接
-- 内连接(验证关联数据完整性)
SELECT o.order_no, u.username, SUM(oi.amount) AS total
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN order_items oi ON o.id = oi.order_id
GROUP BY o.id;
-- 左连接(查找缺失数据)
SELECT p.id, p.name, oi.quantity
FROM products p
LEFT JOIN order_items oi ON p.id = oi.product_id
WHERE oi.product_id IS NULL;
2. 聚合分析
-- 统计测试数据量
SELECT
COUNT(*) AS total_users,
AVG(age) AS avg_age,
MAX(balance) AS max_balance
FROM users;
-- 分组统计(性能测试结果分析)
SELECT
status,
COUNT(*) AS count,
AVG(process_time) AS avg_time
FROM api_logs
GROUP BY status
HAVING avg_time > 1000; -- 筛选慢请求
3. 子查询
-- 嵌套查询(查找最新订单)
SELECT *
FROM orders
WHERE create_time = (
SELECT MAX(create_time)
FROM orders
);
-- EXISTS验证(检查关联记录)
SELECT u.id, u.username
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);
三、数据表管理
1. 表结构操作
-- 创建测试表
CREATE TABLE test_results (
id INT PRIMARY KEY AUTO_INCREMENT,
case_id VARCHAR(50) NOT NULL,
status ENUM('pass', 'fail', 'blocked') DEFAULT 'fail',
exec_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_case (case_id) -- 加速查询
);
-- 添加测试字段
ALTER TABLE users
ADD COLUMN is_test_account BOOLEAN DEFAULT FALSE;
-- 清理测试表
DROP TABLE IF EXISTS temp_data;
2. 数据导入导出
-- 导出测试数据到CSV
SELECT * INTO OUTFILE '/tmp/test_data.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
-- 从CSV导入测试数据
LOAD DATA INFILE '/tmp/import_data.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
四、事务与锁定
1. 事务控制
-- 测试数据一致性
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 或 ROLLBACK 测试异常场景
2. 锁定机制
-- 模拟并发测试
SELECT * FROM inventory
WHERE product_id = 123
FOR UPDATE; -- 行级锁
五、性能优化技巧
1. 执行计划分析
EXPLAIN SELECT *
FROM orders
WHERE user_id = 1001
AND status = 'shipped';
2. 索引优化
-- 添加组合索引
ALTER TABLE api_logs
ADD INDEX idx_composite (api_name, status, create_time);
-- 强制索引使用(测试索引效果)
SELECT /*+ INDEX(orders idx_status) */ *
FROM orders
USE INDEX (idx_status)
WHERE status = 'pending';
六、安全注意事项
1. SQL注入防御
-- 危险写法(测试时需要验证防护)
SELECT * FROM users
WHERE username = 'admin' OR 1=1 --';
-- 参数化查询示例(Python)
cursor.execute(
"SELECT * FROM users WHERE username = %s AND password = %s",
(input_user, input_pass)
)
2. 权限控制
-- 创建测试专用账号
CREATE USER 'test_user'@'%' IDENTIFIED BY 'Test123!';
GRANT SELECT, INSERT ON test_db.* TO 'test_user'@'%';
七、实战案例:测试数据准备
场景:生成百万级测试数据
-- MySQL快速生成方法
INSERT INTO perf_test (data)
SELECT CONCAT('test_data_', FLOOR(RAND() * 1000000))
FROM (
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
) a
JOIN (
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
) b
JOIN (
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
) c
LIMIT 1000000;
附录:不同数据库差异速查
功能 | MySQL | PostgreSQL | SQL Server |
---|---|---|---|
分页 | LIMIT 10 OFFSET 20 | LIMIT 10 OFFSET 20 | OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY |
时间函数 | NOW() | CURRENT_TIMESTAMP | GETDATE() |
字符串连接 | CONCAT(str1, str2) | 'str1'||'str2' | 'str1'+'str2' |
布尔类型 | TINYINT(1) | BOOLEAN | BIT |
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】