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