事务的解释-精华版

做了几年的程序了,对事务的概念总是一知半解,有时候换工作去面试被问到总是答不上来,工作上有时候遇到时候也不知道到底怎么回事,谁实话心里一直有个梗过不去,总希望把它弄明白了。

这不 这两天抽出点时间把事务的资料详细看了一下,有点理解,这里总结一下。

呦 你看到了,那么 希望对你有帮助。


让我们开始吧,

先理一下目录

  1. 事务特性
  2. 事务的隔离级别
  3. 不同隔离级别导致的问题
  4. 我对这些的理解
  5. 引用资料
先说明下,1~3都是从网上把的资料,如果看过这些可以跳过

1.事务的特性
1. Atomic(原子性):事务中包含的操作被看作一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。 
2. Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。 
3. Isolation(隔离性):事务允许多个用户对同一个数据的并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。 
4. Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

2.事务的隔离级别
1.Read Uncommited :读未提交数据(会出现脏读,不可重复读,幻读)
2.Read Commited :读已提交的数据(会出现不可重复读,幻读)
3.Repeatable Read :可重复读(会出现幻读)
4.Serializable :串行化

3.不同隔离级别导致的问题
1. 脏读取(Dirty Reads):一个事务读取了另一个并行事务未提交的数据。 
2. 不可重复读取(Non-repeatable Reads):一个事务再次读取之前的数据时,得到的数据不一致,被另一个已提交的事务修改。 
3. 虚读(Phantom Reads):一个事务重新执行一个查询,返回的记录中包含了因为其他最近提交的事务而产生的新记录。

4.我对这些的理解
先贴一个图吧

事务的解释-精华版_第1张图片
ok,下面就开始挨个解释,
说下表格,这个表格总想为度是事务的四中隔离级别,横向维度就是读和写的事务阻塞关系,会出现的问题,对这些问题的解释
而表格头部的读读,读写,写读,写写,分别对应的是读事务和写事务,在前面的是第一个开启的事务,在后面的是后开启的事务。
举例说明,第二行【读取已提交】读写(第二个)的解释是读事务R1开启之后,然后开启一个写事务W1,结果栏中是 ’否‘, 说明  不会 出现阻塞
行【读取已提交】读写(第个)的解释是事务W 1开启之后,然后开启一个事务R 1,结果栏中是 ’说明是  出现阻塞
1、第一行【读未提交】 和 第四行【序列化】 这两个隔离级别我这里不做解释了,因为上面说的很清楚也很好理解。
2、第二行【读取已提交】只有读读的时候不会导致阻塞,这个时候会出现幻读,从上面‘幻读’和’不可重读读‘问题的定义是你会发现,他们的描述基本上无法区分,都是一个事务读取被另外一个事务修改的问题。这也是令我迷惑的地方。
然后接着说,会导致的问题,它会导致’不可重复读‘,然后我在后面备注了一下是在同一个数据上,ok,在同一个数据上这个是理解第二个和第三个事务隔离级别的关键所在。
如果不看第三个【可重复读】的话,其实其实第二个【读取已提交】很好理解,就是 "读事务R1第一次取一些记录,写事务W1开始修改了R1读取的这些数据在数据库中的对应记录,R1第二次读取的数据和第一次读取的数据不一样,"
3、第三行【可重复读】这个导致的问题是幻读(就是上面的虚读,其实我接受的教育是这个一直是幻读),幻读的解释呢,按照上面的说法是 ’ 一个事务重新执行一个查询,返回的记录中包含了因为其他最近提交的事务而产生的新记录。
这个很难理解的,按照思维惯性,我们会一直认为我们读事务R1和写事务W1都是操作的都是同一批数据。这就导致了和第二行【读取已提交】问题差不多的意思了。
还好,我在上面的表格里面备注了一下,’是满足某条件的数据,不是同一数据‘,可以理解为是通一个查询sql查询两次。这样就是完全一样的查询条件。
        如果你把不同事物的对象分开你就会豁然开朗,其实这个问题实质是这样的。“读事务R1第一次读取之后,写事务W2开始添加一些符合读事务R1中读取时的条件的数据。”

到此为止结束完毕 。如有不理解,请留言。

5.引用资料

事务特性,事务的隔离级别和不同隔离级别引起的问题 参考地址
http://www.360doc.com/content/09/0130/14/18042_2419080.shtml
读已提交和可重复读的理解 参考地址 
http://bbs.csdn.net/topics/120024254#post-111554755

不同隔离级别导致的问题举例解释 参考地址
http://www.cnblogs.com/hollen/archive/2012/05/13/2498309.html


你可能感兴趣的:(事物,事务隔离级别,幻读,不可重复读)