数据库笔记-事务

事务的四大特性(ACID):

  • 原子性(Atomicity):

    多个操作要么全部成功,要么全部失败。原子性只能保证单个事务的一致性

  • 一致性(Consistency):

    保证数据的一致性,不允许出现数据不一致的情况。事务结束时,所有内部结构(如B树索引或双向链表)都必须正确

  • 隔离性(Isolation):

    并发执行的事务不会相互影响。由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执的状态相同。

  • 持久性(Durability):

    事务一旦提交,对数据库的更新就是持久的

事务的最终目的就是为了保证数据的一致性,所以一致性是事务最重要的特性

事务并发可能产生的问题:(在不考虑事务隔离的情况下)

  • 脏读:

    脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

  • 不可重复读:

    不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

  • 幻读/虚读:

    是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

不可重复读与幻读的区别:

不可重复读的重点是修改,同样的条件,你读取过的数据,再次读取出来发现值不一样;(主要在于update)
幻读的重点在于新增或者删除,同样的条件,第 1 次和第 2 次读出来的记录数不一样。(主要在于insert和delete)

事务的隔离级别详细介绍:https://www.cnblogs.com/fanfan-90/p/13341126.html

参考:
https://www.toutiao.com/i6627092825114673671/

https://www.cnblogs.com/jieerma666/p/10805578.html

原文地址:https://www.cnblogs.com/fanfan-90/p/13195583.html