什么是事务
事务的英文是transaction,事务可以保证多个操作原子性,对于数据库来说,事务可以保证批量的DML要么全成功,要么全失败。通常一个事务对应一个完整的业务,例如银行转账。比如银行账户表t_bank:
1001的账户向1002的账户进行转账500元的操作,此时将会执行两条SQL语句:
如果上面的sql语句第一条执行成功了,但是由于某些原因第二条sql语句执行失败了,此时账户1001上的金额变成了500,而账户1002上的金额是2000,这样就不正确了。
为了能够正常的执行业务,上面两条sql语句要么全部执行成功,要么全部执行失败,因为他们是最小的业务单元,不能再进行拆分了。
当第一条sql语句执行结束后,并不会立即修改数据库表中的数据,而是在内存中记录一下,第二条sql语句执行成功后,才会修改数据库表中的数据,如果第二条sql语句执行失败了,则将清空内存中的记录,此时并不会修改数据库表中的数据,要实现这样的功能,就必须使用事务来完成。
事务具有四个特征ACID
原子性(Atomicity),事务是最小单元,不可再分;
一致性(Consistency),事务要求所有的DML语句操作的时候,必须保证同时成功或同时失败;
隔离性(Isolation),一个事务不会影响其他事务的执行;
持久性(Durability),在事务完成之后,该事务对数据库所作的更改将持久地保存在数据库中,并不会被回滚;
MySQL事务的提交和回滚
MySQL中默认情况下,事务是自动提交的,当执行一条DML语句时,就开启并且自动提交了事务。可以通过下面的语句查看事务是否是自动提交的:
如果想要关闭MySQL事务的自动提交,可以使用下面语句手动开启事务:
为了方便演示提交和回滚,先初始化一些数据:
网友评论