数据分析从MySQL开始(Python)(九、MySQL事务问题基础)

区别可参考:https://blog.csdn.net/weixin_42474537/article/details/113421872

事务语句可参考:http://blog.itpub.net/26506993/viewspace-2086514/

目录

一、事务简介

二、开启和关闭(自动提交)

三、场景问题(自动提交开启状态)


一、事务简介

MySQL通过 set autocommit、start transaction、commit、rollback 等语句控制本地事务;MySQL5.7默认使用 Innodb 引擎支持事务;

事务用来管理 insert,update,delete 语句,事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行

set transaction;   =  begin;  开启事务

commit;  =  commit work;   提交事务

rollback;  =  rollback work;  回滚事务

set autocommit  设置自动提交

MySQL5.7默认是开启自动提交的,某些情况下会对性能有一些影响。

如果用户插入十条数据,自动提交会提交十次,但关闭自动提交用代码提交只需要一次;

如果基本上是在代码中对MySQL操作可以关闭自动提交,其他情况我建议开着,进入MySQL中写完SQL都需要commit感觉还是有点麻烦的但相对来说安全。

 

二、开启和关闭(自动提交)

查看开启/关闭状态  (SQL语句    数据库下操作或navicat下)

mysql> show variables like "autocommit";

关闭自动提交

mysql> set @@autocommit=0;

开启自动提交

mysql> set @@autocommit=1;

 

三、场景问题(自动提交开启状态)

在进行数据库操作时出现大致会有两种使用场景:

  • Navicat/MySql 中使用查询语句直接操作;

直连数据库自动提交不需要commit,自动提交事务的状态下一句一句的执行。

alter table `表` modify `列` INT(128);
  • PyCharm代码中提交事务;

不管自动开不开都得commit一下,可以理解为从游标提交到数据库MySQL上。try except异常处理rollback函数可理解为语句执行未成功,撤销该动作。

def insert_sql(self, sql):  # 增
    try:
        self.cur.execute(sql)      //实施
        self.conn.commit()         //提交
    except:
        self.conn.rollback()       //回滚
        print("insert操作失败")


if __name__ == '__main__':

    sql1 = 'UPDATE `表` SET `表`.`列1`=001 WHERE `表`.`列2`=001;'
    update_sql(sql1)

 

你可能感兴趣的:(数据库,python,update,mysql,python)