目錄
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。...