zoukankan      html  css  js  c++  java
  • 避免生产环境执行更新删除语句忘记加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代表是自动提交已经打开。

  • 相关阅读:
    记一道有趣的数学题
    BJOI2018 二进制
    BJOI2016 IP地址
    BJOI2016 回转寿司
    BJOI2017 开车
    BJOI2019 光线
    java 下载
    springboot 运行相关命令
    sql mapper 里面 Integer 类型判断
    springboot 访问jar同级别下的文件访问问题
  • 原文地址:https://www.cnblogs.com/emaes/p/12692669.html
Copyright © 2011-2022 走看看