百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql参数之autocommit的详解
分享文章到:

mysql参数之autocommit的详解

发布时间:01/15 来源: 浏览: 关键词:
MySQL之autocommitmysql 默认是开启 auto commit 的。可以通过如下命令查看 session 级别和 global 级别的设置,下面我们来看mysql参数之autocommit的详解


autocommit是一个改变事务提交方式参数,设置为1时,所有改变变的立即生效,也就是说为1时,语句执行完后,事务自动提交。如果设置为0时,需要通过commit或者rollback进行提交或者回滚事务。 纠正一种说法就是,set autocommit = 0时,会自动开启一个事务,准确来说是set autocommit = 0时下一个语句会自动开启一个事务。 set autocommit = 0与start transaction的区别: 前者下改变事务提交方式,是自动提交还是非自动提交,设置时不会导致前面的事务隐性提交; 后者是立即开启一个事务,并隐性提交前面的事务

set autocommit = 1 与 commit 的区别 两者都可以提交前面的事务,但在5.0、5.1的版本中会不一样,具体可以看下bug#54462

另外比较重要的点需要注意: python使用MySQLdb连接mysql数据库时,autocommit默认会设置成OFF的,每个sql进来后,都需要主动commit来提交事务。代码中设置成ON,如果需要开一个事务,通过start transaction方式来开启。

举个例子:

张三给李四转账500元。那么在数据库中应该是以下操作:

1,先查询张三的账户余额是否足够
2,张三的账户上减去500元
3,李四的账户上加上500元

以上三个步骤就可以放在一个事务中执行提交,要么全部执行要么全部不执行,如果一切都OK就commit提交永久性更改数据;如果出错则rollback回滚到更改前的状态。利用事务处理就不会出现张三的钱少了李四的账户却没有增加500元或者张三的钱没有减去李四的账户却加了500元。

MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用。但不会报错,所以要使用事务处理的童鞋一定要确定你所操作的表示支持事务处理的,如InnoDB。如果不知道表的存储引擎可以通过查看建表语句查看建表的时候有没有指定事务类型的存储引擎,如果没有指定存储引擎默认则是MyISAM不支持事务的存储引擎。
当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。这些都是要消耗系统资源的,要谨慎选择。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有2人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板