美文网首页
事务transaction

事务transaction

作者: 程序员三千_ | 来源:发表于2019-02-21 14:23 被阅读0次

    什么是事务

    事务的英文是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事务的自动提交,可以使用下面语句手动开启事务:

    为了方便演示提交和回滚,先初始化一些数据:

    相关文章

      网友评论

          本文标题:事务transaction

          本文链接:https://www.haomeiwen.com/subject/aipryqtx.html