SpringBoot學習3 4 隔離級別

2021-09-27 20:48:27 字數 1933 閱讀 8391

目錄

1.丟失更新

1.1第一類丟失更新

1.2第二類丟失更新

2.隔離級別

2.1未提交讀

2.2讀寫提交

2.3可重複讀

2.4序列化

3.隔離級別和可能發生的現象

4.隔離級別的配置

4.1@transactional配置

4.2springboot配置檔案配置

事務a提交,事務b回滾,b導致a提交的資料被覆蓋,資料不正確。大部分資料庫已經克服這種丟失更新。

事務a提交,事務b提交,b導致a提交的資料被覆蓋,資料不正確。

四類隔離級別:讀未提交、讀已提交、可重複讀和序列化。

讀未提交:允許事務a讀取另乙個事務b未提交的資料。

髒讀:未提交讀可能導致髒讀,a提交事務後,b回滾,此時a提交的資料是錯誤的,這就是髒讀。

讀已提交:事務a只能讀取另乙個事務b已提交的資料,而不能讀取b未提交的資料。

不可重複讀:讀已提交可能導致不可重複讀。b有未提交的資料,而a不能發現(不能讀取b未提交的資料),a繼續執行自身的邏輯(讀取資料)。當b提交,此時a已經執行的那部分邏輯是錯誤的(讀取的資料是錯誤的)。也就是,在b提交前和提交後,a讀取的資料是不同的,這就是不可重複讀的現象。

可重複讀:如果事務b未提交,則阻塞該部分資料,事務a無法讀取,直至b提交事務。可重複讀是為了克服不可重複讀的現象。

幻讀:事務a多次讀取資料記錄總數,如果期間事務b插入或刪除記錄,a讀取的記錄總數則不一致。幻讀是對記錄總數而言的。

序列化:對資料庫的操作按照sql順序來執行,完全保證資料的一致性。

隔離級別

髒讀不可重複度

幻讀讀未提交yy

y讀已提交ny

y可重複讀nn

y序列化nn

noracle只能支援讀已提交和序列化,預設為讀寫提交。mysql四種都支援,預設為可重複讀。

@transactional可配置在方法名或者類名上

package com.zyf.springdb.mybatis.service;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.stereotype.service;

import org.springframework.transaction.annotation.isolation;

import org.springframework.transaction.annotation.transactional;

import com.zyf.springdb.mybatis.dto.userdto;

@service

public class usermybatisservice

}

#--------------隔離級別數字配置   start --------------#

#-1 資料庫預設隔離級別

#1 讀未提交

#2 讀已提交

#4 可重複讀

#8 序列化

#tomcat資料來源預設隔離級別

#spring.datasource.tomcat.default-transaction-isolation=2

#dbcp2資料庫連線池預設隔離級別

spring.datasource.dbcp2.default-transaction-isolation=2

#--------------隔離級別數字配置 end --------------#

github:  其中的springdb工程。

3 4月學習小結

技術方面 大部分重複,很多名詞都能看懂了,雖然不能清晰深刻理解,但仍有進步。2.近期電子版學習資料 a ios開發系列 by kenshincui 這兩份教程的80 90 的內容都看完了,但文中的 沒有完全擼完,心裡不踏實,吸收的也不夠深刻,以至於不能信手拈來,熟練使用。3.看完了唐巧老師的 ios...

3 4 掘金小冊學習

掘金小冊 前端面試之道 1.型別轉換 2.window物件和全域性變數的關係 由於window物件同時扮演著ecmascript中global物件的角色,因此所有在全域性作用域中宣告的變數 函式都會變成window物件的屬性和方法。但是在全域性作用域下使用 let 和 const 宣告變數,變數並不...

3 4遊戲 學習加法

description 編寫程式,先輸入兩個整數,然後提示使用者輸入這兩個整數的和。如果答案正確,程式報告結果true 否則,報告false。input 輸入兩個加數,乙個結果,若整數結果是兩個整數加數的和,直到輸入兩個0為止 output 如果答案正確,程式報告結果true 否則,報告false。...