mysql 中的事务提交

autocommit 的说明

默认autocommit=ON 是开启的,开启状态下如果没有显示的的进行事务begin, 每条sql 语句都会自动提交事务; 关闭状态下, 如果没有手动进行commit, 那么sql 不会提交;
  1. show variables like 'autocommit';
  2. set @@autocommit=1;

begin 与autocommit 的关系;

begin 显示的开启事务,会禁用autocommit;

多次begin

如果第一个begin 事务没有主动提交,第二个begin会提交第一个begin 的事务;

pymysql 中的事务提交;

autocommit 的说明

默认pymysql 的连接, autocommit=False 的,因此需要手动提交commit, 否则你的sql将不会提交哦
  1. pymysql 的autocommit 本质上,是连接通过修改mysql 的autocommit 属性来实现的;
  2. 可通过Connection 的初始化参数autocommmit 来修改默认配置;

防止多次begin 的处理

因为一般使用pymysql,会搭配连接池来使用,因为如果一个线程,begin的事务处理到一半,发生了异常,你只是释放了连接(释放的处理中没有rollback操作),没有进行rollback, 另外一个线程获取到这个连接后进行begin,会造成前面一个事务进行提交,从而可能产生脏数据;
  1. 通常,我们会处理__exit__ 方法,当发生异常是,进行rollback;

zed2015
15 声望2 粉丝