国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring事務(wù)隔離級別簡介及實例解析

Spring事務(wù)隔離級別簡介及實例解析

2021-04-01 11:24CupOnDesk Java教程

這篇文章主要介紹了Spring事務(wù)隔離級別簡介及實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是spring事務(wù)隔離級別(solation level)介紹及例子,具體如下。

當(dāng)兩個事務(wù)對同一個數(shù)據(jù)庫的記錄進行操作時,那么,他們之間的影響是怎么樣的呢?這就出現(xiàn)了事務(wù)隔離級別的概念。數(shù)據(jù)庫的隔離性與并發(fā)控制有很大關(guān)系。數(shù)據(jù)庫的隔離級別是數(shù)據(jù)庫的事務(wù)特性acid的一部分。acid,即原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。spring的事務(wù)隔離級別有四個:read_uncommittedread_committedrepeatable_readserializable。還有一個,是數(shù)據(jù)庫默認的隔離級別default,mysql默認是repeatable_read

下面來具體看看。

read_uncommitted

 

顧名思義,read_uncommitted意思是,一個事務(wù)可以讀取到另一個事務(wù)未提交的事務(wù)記錄。換句話說,a transaction can read the data that is still uncommitted by other transactions。這是spring事務(wù)最弱的隔離級別。見下面的圖,事務(wù)a開啟,寫入一條記錄,這時候,事務(wù)b讀入數(shù)據(jù),讀到了這條記錄,但是,之后事務(wù)a回滾。因此,事務(wù)b讀到的數(shù)據(jù)不是有效的(the database is in an invalid state)。這種情況稱為臟讀(dirty read)。除了臟讀的問題,read_uncommitted還可能出現(xiàn)non-repeatable read(不可重復(fù)讀)和phantom read(幻讀)的問題。

Spring事務(wù)隔離級別簡介及實例解析

read_committed

 

read_committed隔離級別表明,一個事務(wù)只能讀取到已經(jīng)提交的記錄,不能讀取到未提交的記錄。換句話說,a transaction can only read the committed data, and it can't read the uncommitted data.因此,dirty read的情況不再發(fā)生,但可能會出現(xiàn)其他問題。見下圖。

Spring事務(wù)隔離級別簡介及實例解析

在事務(wù)a兩次讀取的過程之間,事務(wù)b修改了那條記錄并進行提交。因此,事務(wù)a前后兩次讀取的記錄不一致。這個問題稱為non-repeatable read(不可重復(fù)讀)。(兩次讀取的記錄不一致,重復(fù)讀取就會發(fā)現(xiàn)問題。)

除了non-repeatable read的問題,read_committed還可能發(fā)生phantom read的問題。

repeatable_read

 

repeatable_read意思是,一個事務(wù)可以多次從數(shù)據(jù)庫讀取某條記錄,而且多次讀取的那條記錄都是一致的,相同的。這個隔離級別可以避免dirty read和non-repeatable read的問題,但可能發(fā)生phantom read的問題。如下圖。

Spring事務(wù)隔離級別簡介及實例解析

事務(wù)a兩次從數(shù)據(jù)庫讀取一系列記錄,期間,事務(wù)b插入了某條記錄并提交。事務(wù)a第二次讀取時,會讀取到事務(wù)b剛剛插入的那條記錄。在事務(wù)期間,事務(wù)a兩次讀取的一系列記錄不一致,這個問題稱為phantom read。

serializable

 

serializable是spring最強的隔離級別。事務(wù)執(zhí)行時,會在所有級別上加鎖,比如read和write時都會加鎖,仿佛事務(wù)是以串行的方式進行的,而不是一起發(fā)生的。這會防止dirty read、non-repeatable read和phantom read的出現(xiàn),但是,會帶來性能的下降。

default

mysql默認是repeatable_read

例子

下面,我們看一個例子。在數(shù)據(jù)庫mysql里開啟一個事務(wù),不提交。然后,另一個事務(wù)讀取記錄。

剛開始,數(shù)據(jù)庫里的記錄,如圖

Spring事務(wù)隔離級別簡介及實例解析

接下來,在數(shù)據(jù)庫mysql中開啟事務(wù)a,并插入一條記錄。

Spring事務(wù)隔離級別簡介及實例解析

在service的業(yè)務(wù)類的事務(wù)屬性配置為read_uncommitted

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@transactional(isolation=isolation.read_uncommitted)
public class accountservice {
    private accountdao accountdao;
    public accountdao getaccountdao() {
        return accountdao;
    }
    public void setaccountdao(accountdao accountdao) {
        this.accountdao = accountdao;
    }
    public void transfer(string from, string to, double money) {
        accountdao.outmoney(from, money);
        accountdao.inmoney(to, money);
    }
    public void readalluser() {
        list<account> accounts = accountdao.getalluser();
        for (account account : accounts) {
            system.out.println(account);
        }
    }
}

運行下面的測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.chris.service;
import static org.junit.assert.*;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.test.context.contextconfiguration;
import org.springframework.test.context.junit4.springjunit4classrunner;
@runwith(springjunit4classrunner.class)
@contextconfiguration("classpath:applicationcontext.xml")
public class readallusertest {
    @autowired
      private accountservice accountservice;
    @test
      public void test() {
        accountservice.readalluser();
    }
}

結(jié)果如下:

Spring事務(wù)隔離級別簡介及實例解析

可見,這個事務(wù)讀取到了未提交的數(shù)據(jù)。

這時候,將mysql中開啟的事務(wù)a回滾。

?
1
mysql> rollback;

再次運行程序,結(jié)果為

account [name=michael, money=1000.0]
account [name=jane, money=1000.0]
account [name=kate, money=1000.0]

總結(jié)

以上就是本文關(guān)于spring事務(wù)隔離級別簡介及實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/csdn_so_nice/article/details/54290665

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费黄色大片网址 | 在线观看免费视频国产 | 91精品久久久久久 | 欧美色视频在线观看 | 婷婷色国产偷v国产偷v小说 | 亚洲美女二区 | 伊人春色网 | 欧美午夜一区二区三区免费大片 | 中文字幕久久精品 | 国产麻豆精品 | 久久久精品久久久 | 99久久婷婷国产综合精品电影 | 亚洲播放 | 中文在线视频 | 91久久精品国产91久久性色tv | 国产亚洲欧美另类一区二区三区 | 中文av一区二区三区 | 亚洲国产欧美一区二区三区丁香婷 | 精品一区二区视频 | 色婷婷精品国产一区二区三区 | 中文字幕 国产精品 | 九九色综合 | 久久99国产精品久久99果冻传媒 | 欧美久久久久久久 | 国产一区在线视频播放 | 在线日韩视频 | 黄片毛片在线观看 | 欧美精品在线一区二区三区 | 99伊人| 91在线网站 | 中文字幕亚洲欧美日韩在线不卡 | 国产精品久久久久一区二区三区 | 午夜成人在线视频 | 级毛片| 欧美精品一区二区三区蜜桃视频 | 日韩在线免费 | 亚洲不卡在线 | 国产精品视频久久 | 国产美女自拍视频 | 精品日韩一区二区三区 | 日韩一区免费在线观看 |