• 避免生产环境执行更新删除语句忘记加where条件的解决方案


    今天在生产环境上执行update语句时忘记添加where语句,造成了整张都被更新,还好这张表数据量不大,只有上百条数据,最后在平台上一条一条的改数据,工作量不算太大,后来反思如果这张表有上千条上万条数据该怎么办,所以在反思解决方法。
    从源头出发,为什么会出现忘记添加where语句,能不能从源头解决方法。
    假设我们要更新一张表中的一条数据,我们可以添加上事务:
    1、执行查询语句,这条数据存在:

    SELECT * FROM cht_store WHERE CHT_STORE_ID='111'

    2、执行事务,start也可以改成begin:

    START TRANSACTION;

    UPDATE cht_store SET CHT_STORE_ID='000' WHERE CHT_STORE_ID='111';

    --COMMIT;#事务提交

    你看到后台显示受影响1行,说明添加你写的where语句,此时执行查询语句会发现数据已经"被更改"。
    3、如果你忘记添加where语句,会发现受影响N多行,此时你可以执行回滚该条数据:

    ROLLBACK;#事务回滚

    此时你再执行查询语句会发现数据被回滚了。
    4、如果更新的数据与你预想的数据一致,此时事务就可以提交了,执行commit语句即可:

    COMMIT;#事务提交

    5、事务自动提交

    set autocommit=1
    

    是设置事务自动提交的命令,这个命令会将这个线程的更新自动提交掉。这意味着如果你只执行一个select语句,这个事务就启动了,并且会自动提交。
    mysql中查看当前自动提交状态的命令为:show VARIABLES like ‘autocommit’; 如下value为on代表是自动提交已经打开。

  • 相关阅读:
    selfhacking第六天
    Emacshacking第二天
    有符号数和无符号数在计算机中的存储方式以及在Verilog中的运用($signed函数)
    网络资源
    Asp.Net MVC 之 Autofac 初步使用1
    Asp.Net MVC 之 Autofac 初步使用3 集成web api
    Silverligth API for ArcGIS应用程序IIS发布
    WebContent的红色小叉
    [转载]2229岁的人怎么工作?
    Flex+Java 开发环境部署之一:JDK
  • 原文地址:https://www.cnblogs.com/emaes/p/12692669.html
Copyright © 2020-2023  润新知