小屌丝:鱼哥, 请问,如何防止我手抖, 误删库。
小鱼:看样子你今天是来搞事情!
小屌丝:我就是为了防止自己手抖…颤抖…
小鱼:请问一个妹子去药店,问医师要"后悔药",知道是啥不?
小屌丝:额,鱼哥,果然是老司机啊, 你这要飙车了~
小鱼:扯淡, 我就是联想一下而已…而已…
扯远了,不过,别说,还真有后悔药,就是防止 删库, 蹲牢的那种。
今天我们来搞一搞 MySQL的后悔
我们在执行delete 或者update操作时, 如果不是十**(被)分(逼)把(无)握(奈)**,
还是在语句的最后,加上个 limit。防止 看铁窗
执行语句
delete from tesst_table where username != '小明' limit 100;
好处:
①降低写错SQL的代价
如果不添加limit,可能删除所有数据,如果添加limit,则指删除100条;
②SQL执行效率提高
如果第一条就命中目标 return, 没有 limit 的话,还会继续执行扫描表
③避免了长事务
delete 执行时,如果 age 加了索引,MySQL 会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。
④避免因为执行大数据量,把CPU顶满
如果你删除数据量很大时,不加 limit 限制一下记录数,容易把 CPU 打满,导致越删越慢的(小鱼就干过一次这事)。
以下三点,很重要:
①变更 SQL 操作先在测试环境测试,避免有语法错误就放到生产上了
②变更 SQL 操作需要写明详细操作步骤,尤其有依赖关系的时候,如:先修改表结构再补充对应的数据。
③变更 SQL 操作要有回滚方案,并在上生产前,review 对应变更 SQL。
为了防止看铁窗,咱们还是按规矩来:
修改或者删除数据,在执行sql前,一定要备份…备份…备份…
如果删数据, 不备份,想想都有啥后果:
轻则 boss “指导” 你
重则 牢头 “指导” 你
修改或者删除数据,在执行sql前,一定要where一下,确认是自己想要的,然后再delete 或者update
在执行SQL修改数据时, 建议 使用begin + commit事务的习惯
例子:
begin: update test_table set sort = 100000 where ext_name like '%小明'; commit:
小屌丝:鱼哥, 有了这5种后悔药, 再也不怕自己手抖了
小鱼: 养成好习惯,不仅方便他人,还方便自己。