欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談mysql數(shù)據(jù)庫事物隔離級別

 更新時間:2023年05月25日 10:24:56   作者:幸福的小雨  
本文主要介紹了淺談mysql數(shù)據(jù)庫事物隔離級別,數(shù)據(jù)庫事務的隔離級別有4個,這四個級別可以逐個解決臟讀 、不可重復讀 、幻讀這幾類問題,本文就詳細的介紹一下,感興趣的可以了解一下

 一、數(shù)據(jù)庫事務的隔離級別

數(shù)據(jù)庫事務的隔離級別有4個,由低到高依次為Read uncommitted(讀未提交) 、Read committed(讀已提交) 、Repeatable read(重復讀) 、Serializable(序列化) ,這四個級別可以逐個解決臟讀 、不可重復讀 、幻讀這幾類問題。

Read UnCommitted(讀未提交)
最低的隔離級別。一個事務可以讀取另一個事務并未提交的更新結(jié)果。

Read Committed(讀提交)
大部分數(shù)據(jù)庫采用的默認隔離級別。一個事務的更新操作結(jié)果只有在該事務提交之后,另一個事務才可以的讀取到同一筆數(shù)據(jù)更新后的結(jié)果。

Repeatable Read(重復讀)
mysql的默認級別。整個事務過程中,對同一筆數(shù)據(jù)的讀取結(jié)果是相同的,不管其他事務是否在對共享數(shù)據(jù)進行更新,也不管更新提交與否。

Serializable(序列化)
最高隔離級別。所有事務操作依次順序執(zhí)行。注意這會導致并發(fā)度下降,性能最差。通常會用其他并發(fā)級別加上相應的并發(fā)鎖機制來取代它。

二、不同事務級別帶來的并發(fā)問題

臟讀

臟讀發(fā)生在一個事務A讀取了被另一個事務B修改,但是還未提交的數(shù)據(jù)。假如B回退,則事務A讀取的是無效的數(shù)據(jù)。這跟不可重復讀類似,但是第二個事務不需要執(zhí)行提交。

總結(jié):事務1讀取了事務2修改但未被提交的數(shù)據(jù),稱之為臟讀。

不可重復讀

在基于鎖的并行控制方法中,如果在執(zhí)行select時不添加讀鎖,就會發(fā)生不可重復讀問題。在多版本并行控制機制中,當一個遇到提交沖突的事務需要回退但卻被釋放時,會發(fā)生不可重復讀問題。

在上面這個例子中,事務2提交成功,它所做的修改已經(jīng)可見。然而,事務1已經(jīng)讀取了一個其它的值。在序列化和可重復讀的隔離級別中,數(shù)據(jù)庫管理系統(tǒng)會返回舊值,即在被事務2修改之前的值。在提交讀和未提交讀隔離級別下,可能會返回被更新的值,這就是“不可重復讀”。

有兩個策略可以防止這個問題的發(fā)生:
(1) 推遲事務2的執(zhí)行,直至事務1提交或者回退。這種策略在使用鎖時應用。
(2) 而在多版本并行控制中,事務2可以被先提交。而事務1,繼續(xù)執(zhí)行在舊版本的數(shù)據(jù)上。當事務1終于嘗試提交時,數(shù)據(jù)庫會檢驗它的結(jié)果是否和事務1、事務2順序執(zhí)行時一樣。如果是,則事務1提交成功。如果不是,事務1會被回退。

總結(jié):當事物2修改的數(shù)據(jù)已被提交(commited),但還未被設(shè)置到可重復讀狀態(tài)時。事物1讀取的數(shù)據(jù)還是舊版本數(shù)據(jù),稱之為不可重復讀。

幻讀

幻讀發(fā)生在當兩個完全相同的查詢執(zhí)行時,第二次查詢所返回的結(jié)果集跟第一個查詢不相同。發(fā)生的情況:沒有范圍鎖。

總結(jié):當事物1讀取數(shù)據(jù)后,事物2插入了一條信息,這時事物1再讀取數(shù)據(jù),發(fā)現(xiàn)第一次讀取的數(shù)據(jù)和第二次讀取的數(shù)據(jù)不一致稱之為幻讀。

三、不可重復讀和幻讀比較

不可重復讀

不可重復讀的重點是修改: 同樣的條件, 你讀取過的數(shù)據(jù), 再次讀取出來發(fā)現(xiàn)值不一樣了

例子:

在事務1中,Mary 讀取了自己的工資為1000,操作并沒有完成

con1 = getConnection();  
select salary from employee empId ="Mary";  

在事務2中,這時財務人員修改了Mary的工資為2000,并提交了事務.

con2 = getConnection();  
update employee set salary = 2000;  
con2.commit(); 

在事務1中,Mary 再次讀取自己的工資時,工資變?yōu)榱?000

select salary from employee empId ="Mary"; 

在一個事務中前后兩次讀取的結(jié)果并不致,導致了不可重復讀。

幻讀

幻讀的重點在于新增或者刪除 (數(shù)據(jù)條數(shù)變化)。同樣的條件, 第1次和第2次讀出來的記錄數(shù)不一樣

例子:

目前工資為1000的員工有10人。
事務1,讀取所有工資為1000的員工。

con1 = getConnection();  
select * from employee where salary =1000;  

共讀取10條記錄

這時另一個事務向employee表插入了一條員工記錄,工資也為1000

con2 = getConnection();  
Insert into employee(empId,salary) values("Lili",1000);  
con2.commit();  

事務1再次讀取所有工資為1000的員工

select * from employee where salary =1000; 

共讀取到了11條記錄,這就像產(chǎn)生了幻讀。

到此這篇關(guān)于淺談mysql數(shù)據(jù)庫事物隔離級別的文章就介紹到這了,更多相關(guān)mysql事物隔離級別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MYSQL命令行導入導出數(shù)據(jù)庫詳解

    MYSQL命令行導入導出數(shù)據(jù)庫詳解

    這篇文章主要詳細介紹了MYSQL命令行進行導入導出數(shù)據(jù)庫操作的方法,并且分win系統(tǒng)和Linux系統(tǒng)介紹了mysql備份和還原的方法,非常的詳細,希望對大家能有所幫助
    2014-09-09
  • MySQL數(shù)據(jù)庫的性能優(yōu)化

    MySQL數(shù)據(jù)庫的性能優(yōu)化

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的性能優(yōu)化,文中介紹的非常詳細,一定的參考價值,感興趣的同學可以參考閱讀
    2023-04-04
  • windows?64位下mysql8.0.25安裝配置教程(最詳細!)

    windows?64位下mysql8.0.25安裝配置教程(最詳細!)

    之前一直在用 5.7 版本,竟然一下子跳到 8.0了,下面這篇文章主要給大家介紹了關(guān)于在windows?64位下mysql8.0.25安裝配置教程,文章通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 解析MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL

    解析MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL

    這篇文章主要介紹了MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL的相關(guān)資料,幫助大家更好的理解和學習MySQL8.0感興趣的朋友可以了解下
    2020-08-08
  • MySQL查詢進階操作從函數(shù)到表連接的使用

    MySQL查詢進階操作從函數(shù)到表連接的使用

    這篇文章主要介紹了MySQL查詢進階從函數(shù)到表連接的使用,包括mysql函數(shù)的使用,MySQL的分組分頁及查詢關(guān)鍵字的執(zhí)行順序,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • MySQL索引事務詳細解析

    MySQL索引事務詳細解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫索引事務,索引是為了加速對表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲結(jié);事物是屬于計算機中一個很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進入文章了解具體內(nèi)容吧
    2022-01-01
  • 深入MySQL存儲引擎比較的詳解

    深入MySQL存儲引擎比較的詳解

    本篇文章是對MySQL存儲引擎的比較進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的方法示例

    mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的方法示例

    這篇文章主要介紹了mysql創(chuàng)建本地用戶及賦予數(shù)據(jù)庫權(quán)限的相關(guān)資料,文中的介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Mysql中聚簇索引和非聚簇索引的區(qū)別詳解

    Mysql中聚簇索引和非聚簇索引的區(qū)別詳解

    這篇文章主要介紹了Mysql中聚簇索引和非聚簇索引的區(qū)別詳解,聚簇索引就是按照每張表的主鍵構(gòu)造一顆B+樹,同時葉子節(jié)點中存放的就是整張表的行記錄數(shù)據(jù),也將聚集索引的葉子節(jié)點稱為數(shù)據(jù)頁,需要的朋友可以參考下
    2023-07-07
  • MySQL ALTER命令使用詳解

    MySQL ALTER命令使用詳解

    這篇文章主要為大家詳細介紹了MySQL ALTER命令的使用方法,簡單實用,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論