事务隔离级别

来源:互联网 发布:淘宝首页源代码 编辑:程序博客网 时间:2024/05/31 06:22

事务具有四个特征

1 、原子性(Atomicity)

事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 
2 、一致性 (Consistency) 
数据库事务不能破坏关系数据库的完整性以及业务逻辑上的一致性。
3 、隔离性 (Isolation)
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 
4 、持续性(Durability)

也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

事务应用场景

对于同一个银行帐户A内有200元,甲进行提款操作100元,乙进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题:

脏读(Dirty Read): 一个事务读到另一个事务未提交的更新数据.

事务T1更新了数据还未提交,这时事务T2来读取相同的数据,则T2读到的数据其实是错误的数据,即脏数据。基于脏数据所作的操作是不可能正确的 。

脏读:甲取款100元未提交,乙进行转帐查到帐户内剩有100元,这是甲放弃操作回滚,乙正常操作提交,帐户内最终为0元,乙读取了甲的脏数据,客户损失100元。

解读:甲进行回滚操作,账户将变成200元,乙进行正常提交,200元将被覆盖为0,故顾客损失100元

第一类丢失更新: 撤销一个事务时,把其他事务已提交的更新数据覆盖。

例子:首先甲提款时帐户内有200元,同时乙转帐也是200元,然后甲乙同时操作,甲操作成功取走100元,乙操作失败回滚,帐户内最终为200元,这样甲的操作被覆盖掉了,银行损失100元。

不可重复读(Nonrepeatable Read) :一个事务读到另一个事务已提交的更新数据。
一个事务的两次读取中,读取相同的资源得到不同的值。当事务T2在事务T1的两次读取之间更新数据,则会发生此种错误。(重点在修改)

例子:甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,这时乙在准备最后更新的时候又进行了一次查询,发现结果是100元,这时乙就会很困惑,不知道该将帐户改为100还是0。

0 0
原创粉丝点击