插入与更新的测试方法
1. 插入(INSERT)相关测试
(1)INSERT IGNORE
INSERT IGNORE INTO hd_user_reviews_1tn (id, incharge)
VALUES (123, '张三');
- 如果
id=123已存在(违反主键/唯一索引),这一行会被忽略,不会报错。 - 插入完成后立刻:
SHOW WARNINGS;
可看到是否有 Duplicate entry 或 Data truncated。
(2)INSERT ... ON DUPLICATE KEY UPDATE
INSERT INTO hd_user_reviews_1tn (id, incharge)
VALUES (123, '李四')
ON DUPLICATE KEY UPDATE incharge = VALUES(incharge);
- 如果键冲突,则更新对应字段。
- 常用于“如果有就更新,没有就插入”的场景。
(3)测试数据有效性
在插入前,可以用 SELECT 检查要插入的数据是否合格:
-- 检查是否有超长值
SELECT col, CHAR_LENGTH(col) AS len
FROM tmp_new_data
WHERE CHAR_LENGTH(col) > (SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.columns
WHERE table_name='hd_user_reviews_1tn'
AND column_name='incharge');
2. 更新(UPDATE)相关测试
(1)UPDATE IGNORE
UPDATE IGNORE hd_user_reviews_1tn
SET incharge = '王五'
WHERE id = 123;
- 如果更新会触发唯一索引冲突或数据截断,该行会被忽略,不影响其他行。
- 再执行:
SHOW WARNINGS;
(2)更新前 SELECT 预检查
SELECT id, incharge
FROM hd_user_reviews_1tn
WHERE id = 123;
确认数据存在且满足条件。
(3)更新测试用例:分批或事务
START TRANSACTION;
UPDATE IGNORE hd_user_reviews_1tn t1
JOIN hit_link t2 ON t2.平台链接 = t1.platform_product_id
SET t1.incharge = t2.负责人
WHERE t1.incharge IS NULL
LIMIT 10; -- 先小范围测试
SHOW WARNINGS;
ROLLBACK; -- 测试后回滚
-- 如果结果满意再 COMMIT;
3. 插入 + 更新混合测试(常用套路)
如果你要做一批数据更新/插入,可以用这种模式:
-- 新数据存到临时表
CREATE TEMPORARY TABLE tmp_new_data (
id INT,
incharge VARCHAR(100)
);
-- 插入一些测试值
INSERT INTO tmp_new_data VALUES (123, '超长名字超长名字超长名字超长名字超长名字');
-- 用 INSERT IGNORE 或 ON DUPLICATE KEY UPDATE 测试写入
INSERT IGNORE INTO hd_user_reviews_1tn (id, incharge)
SELECT id, incharge FROM tmp_new_data;
SHOW WARNINGS;
这样你就能在不破坏正式表的情况下,模拟所有插入/更新操作。
✅ 最终总结(插入/更新测试流程)
- 准备临时表或事务 → 避免污染正式数据。
- INSERT IGNORE / UPDATE IGNORE → 先执行,保证不中断。
- SHOW WARNINGS → 查看警告,定位具体问题。
- SELECT 检查数据 → 用正则、LENGTH、COUNT 找出异常值。
- 修字段 / 修数据 → 修改表结构或清洗后重试。
- 去掉 IGNORE → 严格执行。
评论