场景描述
生产环境下有时需要更新直接修改数据库,为防止数据操作异常导致数据丢失,大都是先备份再操作,操作失败时回滚备份。
要修改的表:qrtz_triggers
临时备份表:qrtz_triggers_20221031
修改操作: 删除 qrtz_triggers 中的一行数据。
操作演示
应用备份
use demo;
create table qrtz_triggers_20221031 as select * from qrtz_triggers;
修改操作
delete from qrtz_fired_triggers where SCHED_NAME='clusteredScheduler' and ENTRY_ID='job-scheduler-7b9f7bcd78-8b9kt16669688543581666968854330';
失败时回滚
use refidb;
replace into qrtz_fired_triggers select * from qrtz_fired_triggers_20221031;
replace into
和 insert into
有什么区别?
replace into
会根据主键或者唯一索引判断该条记录是否存在,如果存在则先删除此行数据,再插入新的数据;如果不存在,则直接插入新数据。所以使用 replace into 需要注意的是表中必须存在主键或者唯一索引,不然的话会直接插入,导致数据重复。
insert into
直接插入,如果主键或者唯一索引已经存在会直接插入失败。
啰嗦一句
上述操作只是个 demo 演示,真正的生产环境可能表中的数据很多,全表操作不现实。备份和修改时需要加上 where 条件,修改哪块备份哪块。