Mysql问题sql自动优化导致全表更新已提桶跑路
昨日为修复线上数据, 提交运维执行脚本, 因当时过于匆忙导致sql复制出错, 后面差点删除跑路!!
我提交的SQL:
update aaa_aaa.aaa t set t.t = 11 and t.t1 in (1,2,3) and t.status = 2;
我期望的SQL:
update aaa_aaa.aaa t set t.t = 11 where t.t1 in (1,2,3) and t.status = 2;
MYSQL自动解析后的SQL:
update aaa_aaa.aaa t set t.t = 11 (and t.t1 in (1,2,3) and t.status = 2);
事情经过就是, 当时我想要一个sql来修复生产数据, 但由于情况比较急, 导致复制sql出错, 编写的sql 语句缺少where语句, 被mysql自动解析导致对数据库表做了全量更新. 后续我找运维拉下来了生产库的binlog日志, 提取对应字段并组装sql对数据做了紧急修复.
建议各位老铁能不用sql修复线上数据就别用, 就算用也一定要开启事务提交, 而且最好给mysql加上语法强 校验限制update必须有where!