线上问题复盘记录

cust_id误刷问题

问题原因:错误的update语句,导致本来更新一条数据的, 结果更新了全表

解决措施:找DBA从备份库,将生产库cust_id为0的数据,恢复到误刷前一秒的cust_id

后续改进:

禁止以任意方式直接执行sql

如果需要修改线上数据,应使用针对单边,单行操作的业务型接口

如有批量数据, 应提jira交DBA执行

sql问题解析:

有问题的sql: update deal_order set cust_id=1234 and order_id=666666666

可以看到这个sql中没有where条件, 而是使用的and,在执行过程中会被解析为 : update deal_order set cust_id=(1234 and order_id=666666666)

注意(1234 and order_id=666666666)是一个布尔类型的值。 and 前后都为大于0的值,那么整体会是1 ,否则整体为0 。

在此sql执行之后,order_id=666666666的记录, cust_id会被刷为1,其余的记录cust_id会全部刷为0

你可能感兴趣的:(java,mysql)