软件测试工程师必备:高频SQL语句实战手册

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


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 20LIMIT 10 OFFSET 20OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY

时间函数

NOW()CURRENT_TIMESTAMPGETDATE()

字符串连接

CONCAT(str1, str2)
'str1'||'str2'

'str1'+'str2'

布尔类型

TINYINT(1)BOOLEANBIT

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​​​
在这里插入图片描述​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值