课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
事务是我们在学习服务器后端编程开发技术的时候需要重点掌握的一个编程开发知识,而今天我们就通过案例分析来了解一下,数据库开发事务概念与特点。
一、什么是事务
事务指的是满足ACID特性的一组操作,通过Commit提交一个事务,也使用Rollback进行回滚。
事务是并发控制的单位,一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。
二、事务的ACID
1.原子性(Atomicity)
事务被视为不可分割的小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
2.一致性(Consistency)
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。
3.隔离性(Isolation)
一个事务所做的修改在终提交以前,对其它事务是不可见的。
4.持久性(Durability)
一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。使用重做日志来保证持久性。
事务的ACID特性概念简单,但不是很好理解,主要是因为这几个特性不是一种平级关系:
1、只有满足一致性,事务的执行结果才是正确的。
2、在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要能满足原子性,就能满足一致性。
3、在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。
4、事务满足持久化是为了能应对数据库崩溃的情况。
三、并发一致性问题
在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。
T1是指事务1,T2是指事务2
丢失修改:两个事务同时操作相同数据,后提交的事务会覆盖先提交的事务处理结果,通过乐观锁就可以解决,悲观锁也可以。
例如:T1和T2两个事务都对一个数据进行修改,T1先修改,T2随后修改,T2的修改覆盖了T1的修改。
读脏数据:事务A读取到了事务B已经修改但尚未提交的数据,如果事务B回滚,A读取的数据无效,不符合一致性
例如:T1修改一个数据,T2随后读取这个数据。如果T1撤销了这次修改,那么T2读取的数据是脏数据。
不可重复读:事务A读取到了事务B已经提交的修改数据,不符合隔离性,也不符合一致性
例如:T2读取一个数据,T1对该数据做了修改。如果T2再次读取这个数据,此时读取的结果和一次读取的结果不同。
幻读:事务A读取到了事务B提交的新增数据,不符合隔离性,也不符合一致性
例如:T1读取某个范围的数据,T2在这个范围内插入新的数据,T1再次读取这个范围的数据,此时读取的结果和和一次读取的结果不同。
产生并发性一致性问题,那肯定是不符合一致性,只有满足了一致性,事务的执行结果才是正确的。
产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。