插入与更新的测试方法

1. 插入(INSERT)相关测试

(1)INSERT IGNORE

INSERT IGNORE INTO hd_user_reviews_1tn (id, incharge)
VALUES (123, '张三');
  • 如果 id=123 已存在(违反主键/唯一索引),这一行会被忽略,不会报错。
  • 插入完成后立刻:
SHOW WARNINGS;

可看到是否有 Duplicate entryData 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;

这样你就能在不破坏正式表的情况下,模拟所有插入/更新操作。


✅ 最终总结(插入/更新测试流程)

  1. 准备临时表或事务 → 避免污染正式数据。
  2. INSERT IGNORE / UPDATE IGNORE → 先执行,保证不中断。
  3. SHOW WARNINGS → 查看警告,定位具体问题。
  4. SELECT 检查数据 → 用正则、LENGTH、COUNT 找出异常值。
  5. 修字段 / 修数据 → 修改表结构或清洗后重试。
  6. 去掉 IGNORE → 严格执行