mysql 中的事务提交
autocommit 的说明
默认autocommit=ON 是开启的,开启状态下如果没有显示的的进行事务begin, 每条sql 语句都会自动提交事务; 关闭状态下, 如果没有手动进行commit, 那么sql 不会提交;
- show variables like 'autocommit';
- set @@autocommit=1;
begin 与autocommit 的关系;
begin 显示的开启事务,会禁用autocommit;
多次begin
如果第一个begin 事务没有主动提交,第二个begin会提交第一个begin 的事务;
pymysql 中的事务提交;
autocommit 的说明
默认pymysql 的连接, autocommit=False 的,因此需要手动提交commit, 否则你的sql将不会提交哦
- pymysql 的autocommit 本质上,是连接通过修改mysql 的autocommit 属性来实现的;
- 可通过Connection 的初始化参数autocommmit 来修改默认配置;
防止多次begin 的处理
因为一般使用pymysql,会搭配连接池来使用,因为如果一个线程,begin的事务处理到一半,发生了异常,你只是释放了连接(释放的处理中没有rollback操作),没有进行rollback, 另外一个线程获取到这个连接后进行begin,会造成前面一个事务进行提交,从而可能产生脏数据;
- 通常,我们会处理__exit__ 方法,当发生异常是,进行rollback;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。