偶然发现mysql在增删改查数据之后不需要commit,执行commit显示影响的条数是0,查阅网上资料发现是安装mysql后其默认开启了AutoCommit模式(即每条sql都作为单独事务commit一次),这样对某些数据场景存在隐患。
首先说说个人对事务的理解,即一组修改数据库的sql语句组合而成为一个事务,所有sql都成功才真正的修改数据库,只要一个sql失败则全部撤销。
事务案例:A账户转账500元给B账户,需指向多条语句如下(任何一条失败则执行rollback操作,全部成功则执行commit操作。若打开AutoCommit选项则肯能造成金额丢失----即A账户减少余额成功B账户增加余额失败)
- 查询A账户是否存在
- 查询B账户是否存在
- 查询A账户余额是否大于等于500
- 减少A账户余额
- 增加B账户余额
- commit
mysql关闭自动提交的方法 set @@session.autocommit=0;