盘点一下数据库的误操作有哪些后悔药?
前言
无论是开发、测试,还是DBA,都难免会涉及到数据库的操作,比如:创建某张表,添加某个字段、添加数据、更新数据、删除数据、查询数据等等。
正常情况下还好,但如果操作数据库时出现失误,比如:
还有很多很多场景,我就不一一列举了。
如果出现线上环境数据库误操作怎么办?有没有后悔药?
答案是有的,请各位看官仔细往下看。
1.不要用聊天工具发sql语句
通常开发人员写好sql语句之后,习惯通过聊天工具,比如:qq、钉钉、或者腾讯通等,发给团队老大
或者DBA
在线上环境执行。但由于有些聊天工具,对部分特殊字符
会自动转义,而且有些消息由于内容太长
,会被自动分成多条消息。
这样会导致团队老大或者DBA复制出来的sql不一定是正确的。
他们需要手动拼接成一条完整的sql
,有时甚至需要把转义后的字符替换回以前的特殊字符,无形之中会浪费很多额外的时间。即使终sql拼接好了,真正执行sql的人,心里一定很虚。
所以,强烈建议你把要在线上执行的sql语句用邮件
发过去,可以避免使用聊天工具的一些弊端,减少一些误操作的机会。而且有个存档,方便今后有问题的时候回溯原因。很多聊天工具只保留近7天
的历史记录,邮件会保留更久一些。
别用聊天工具发sql语句!
别用聊天工具发sql语句!
别用聊天工具发sql语句!
重要的事情说三遍,它真的能减少一些误操作。
2.把sql语句压缩成一行
有些时候,开发人员写的sql语句很长,使用了各种join
和union
,而且使用美化工具,将一条sql变成了多行。在复制sql的时候,自己都无法确定sql是否完整。(为了装逼,把自己也坑了,哈哈哈)
线上环境有时候需要通过命令行连接数据库,比如:mysql,你把sql语句复制过来后,在命令行界面执行,由于屏幕滚动太快,这时根本无法确定sql是否都执行成功。
针对这类问题,强烈建议把sql语句压缩成一行
,去掉多余的换行符
和空格
,可以有效的减少一些误操作。
sql压缩工具
推荐使用:https://tool.lu/sql/
3.操作数据之前先select一下
需要特别说明的是:本文的操作数据主要指修改
和删除
数据。
很多时候,由于我们人为失误,把where条件写错了。但没有怎么仔细检查,就把sql语句直接执行了。影响范围小还好,如果影响几万、几十万,甚至几百万行数据,我们可能要哭了。
针对这种情况,在操作数据之前,把sql先改成select count(*)
语句,比如:
update order set status=1 where status=;