生产数据库批量 UPDATE / DELETE 核心要点-不备份=自行提桶跑路

生产数据库批量 UPDATE / DELETE 核心要点-不备份=自行提桶跑路

1. 执行前必做

先 SELECT 预览影响行数

sql 复制代码
-- 把 UPDATE/DELETE 的 WHERE 条件原封不动拿来 SELECT
SELECT COUNT(*) FROM sys_notify_todo
WHERE fd_app_name = 'OA'
  AND fd_create_time < '2026-05-22 22:16:00';

备份目标数据

sql 复制代码
-- 建备份表
CREATE TABLE sys_notify_todo_bak_20260522 AS
SELECT * FROM sys_notify_todo
WHERE fd_app_name = 'OA'
  AND fd_create_time < '2026-05-22 22:16:00';

2. SQL 写法要点

用 CASE WHEN 代替多条 UPDATE

sql 复制代码
-- ❌ 错误:顺序执行互相覆盖(今天的教训)
UPDATE ... SET fd_module_name = '泛微邮件' WHERE ... = '内部邮件';
UPDATE ... SET fd_module_name = '泛微流程审批' WHERE ... != '内部邮件';

-- ✅ 正确:一条搞定
UPDATE sys_notify_todo
SET fd_module_name = CASE
    WHEN fd_module_name = '内部邮件' THEN '泛微邮件'
    ELSE '泛微流程审批'
END
WHERE fd_app_name = 'OA'
  AND fd_create_time < '2026-05-22 22:16:00';

WHERE 条件必须精准,禁止裸奔

sql 复制代码
-- ❌ 危险
UPDATE sys_notify_todo SET fd_module_name = '泛微邮件';

-- ✅ 安全
UPDATE sys_notify_todo SET fd_module_name = '泛微邮件'
WHERE fd_id IN ('id1', 'id2', 'id3');

3. 事务保护

sql 复制代码
BEGIN;

UPDATE sys_notify_todo
SET fd_module_name = '泛微邮件'
WHERE fd_id IN ('id1', 'id2');

-- 先 SELECT 确认结果对不对
SELECT * FROM sys_notify_todo WHERE fd_id IN ('id1', 'id2');

-- 没问题再提交
COMMIT;

-- 有问题立即回滚
ROLLBACK;

4. 执行后验证

sql 复制代码
-- 更新完马上核对数据是否符合预期
SELECT fd_module_name, COUNT(*) AS cnt
FROM sys_notify_todo
WHERE fd_app_name = 'OA'
  AND fd_create_time < '2026-05-22 22:16:00'
GROUP BY fd_module_name;

核心口诀

  1. 备份先行,导出或建备份表
  2. SELECT 预览,确认影响行数
  3. 事务包裹,出错立即 ROLLBACK
  4. CASE WHEN,多逻辑一条 SQL 搞定
  5. 执行后验证,SELECT 确认结果
相关推荐
云和恩墨35 分钟前
数据库一体机简史:从ODA到zData X,命名之中的玄机
数据库·vr
万亿少女的梦16841 分钟前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
万亿少女的梦1681 小时前
基于SpringBoot与Vue的历史博物馆展品展示与游客管理系统设计
spring boot·mysql·vue·系统设计·博物馆管理系统
数据库小学妹1 小时前
KES是什么?国产数据库技术架构、核心能力与选型实战解析
数据库·经验分享·架构·国产数据库·数据库选型·信创数据库
衍生星球2 小时前
SpringBoot3 + Vue3 + 微信小程序如何学习,以及学哪些技术,组件
sql·微信小程序·uni-app·vue·springboot
Database_Cool_2 小时前
向量检索加速首选:阿里云 Tair 内置向量能力毫秒级召回
数据库·阿里云
强健的石头3 小时前
django文件对象是什么?
数据库·django·sqlite
灯澜忆梦3 小时前
MySQL 完整学习路线
学习·mysql
ClouGence3 小时前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
烟漠河洛4 小时前
线上事故复盘:Redis幂等性设计边界没覆盖跨状态请求,订单状态机直接崩了
数据库·redis·缓存