在我们对一个程序进行处理时,很多可能会不小心处理到其他的事务,所以我们产生了隔离级别,用来分析事务受影响的程度。下面我们先对事务隔离级别的概念进行理解,然后就并发事务中出现的三种情况分别进行介绍和举例,最后为大家罗列出mysql的四种隔离级别。
1.概念
定义了一个事务可能受其他并发事务影响的程度。
2.并发事务引起的问题
在典型的应用程序中,多个事务并发运行,经常会 *** 作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致以下的问题。
(1)脏读
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
这是非常危险的,假设A向B转帐100元,对应sql语句如下所示
update account set money=money+100 where name='B'; update account set money=money-100 where name='A';
当第1条sql执行完,第2条还没执行(A未提交时),如果此时B查询自己的帐户,就会发现自己多了100元钱。如果A等B走后再回滚,B就会损失100元。
(2)不可重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。
(3)虚读(幻读)
虚读(幻读)是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
如丙存款100元未提交,这时银行做报表统计account表中所有用户的总额为500元,然后丙提交了,这时银行再统计发现帐户为600元了,造成虚读同样会使银行不知所措,到底以哪个为准。
3.mysql数据库的四种隔离级别
由高到低为
(1)Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
(2)Repeatable read (可重复读):可避免脏读、不可重复读的发生。
(3)Read committed (读已提交):可避免脏读的发生。
(4)Read uncommitted (读未提交):最低级别,任何情况都无法保证。
以上就是java事务隔离级别的相关内容介绍,在我们对其中的基本知识点进行理解后,就可以更好的进行隔离级别的学习了。没看懂的,可以先对前半部分的知识点重点学习。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)