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

MySQL事務與隔離級別的使用基礎理論

 更新時間:2023年02月20日 10:26:21   作者:綠仔牛奶_  
這篇文章主要介紹了MySQL事務的隔離級別詳情,事務隔離級別越高,為避免沖突所花費的性能也就越多,即效率低。在“可重復讀”級別,實際上可以解決部分的虛讀問題,但是不能防止update更新產(chǎn)生的虛讀問題,要禁止虛讀產(chǎn)生,還是需要設置串行化隔離級別

什么是事務

事務就是一組操作的集合,事務將整組操作作為一個整體,共同提交或者共同撤銷

這些操作只能同時成功或者同時失敗,成功即可提交事務,失敗就執(zhí)行事務回滾

MySQL的事務默認是自動提交的,一條語句執(zhí)行成功,MySQL將會隱式的提交事務

以轉(zhuǎn)賬為例,張三向李四轉(zhuǎn)賬1000元

這個整體行為包含三個操作:首先查詢張三賬戶的余額,其次將張三賬戶余額-1000,最后將李四賬戶余額+1000。事務就是將這三個操作看作最小提交單元,就是一榮俱榮一損俱損。

-- 查看事務管理狀態(tài)  1-自動  0-手動
select @@autocommit;
-- 設置事務手動管理
set @@autocommit = 0;
-- 開啟事務
start transaction;
-- 開啟事務:start transaction 或者 begin
select money from account where name = '張三';
update account set money = money - 1000 where name = '張三';
update account set money = money + 1000 where name = '李四';
-- 事務提交
commit;
-- 事務回滾
rollback;

事務四大特性ACID

原子性Atomicity:一組操作為最小執(zhí)行單元,只能全部執(zhí)行成功或者全部失敗

一致性Consistency:事務完成后,所有數(shù)據(jù)都要保持一致狀態(tài)

一致性表示事務完成后,數(shù)據(jù)操作前后符合邏輯運算,狀態(tài)一致

隔離性Isolation:是指在并發(fā)操作數(shù)據(jù)庫時,各個事務之間不會相互影響

持久性Durability:事務一旦提交或回滾,對于數(shù)據(jù)庫的修改將會永久保存

并發(fā)事務問題

臟讀

兩個事務A和B在并發(fā)下操作數(shù)據(jù)庫中的同一數(shù)據(jù)時,當事務A對數(shù)據(jù)進行了修改但是還沒有commit的同時,事務B對該數(shù)據(jù)進行了select,此時事務B讀取到的數(shù)據(jù)就是不準確的。這種情況叫做臟讀

事務B讀取到了事務A修改但還未提交的數(shù)據(jù)---->臟讀

不可重復讀

同樣事務AB并發(fā)下操作數(shù)據(jù)庫中同一數(shù)據(jù),首先事務A對該數(shù)據(jù)進行查詢,查詢之后又進行了其他操作。與此同時,事務B執(zhí)行了更新操作并且成功commit。那么當事務A再次對數(shù)據(jù)庫查詢的時候就會出現(xiàn)與上次讀取到的數(shù)據(jù)不一致的情況

幻讀

事務AB并發(fā)下操作數(shù)據(jù)庫中同一數(shù)據(jù),事務A首先查詢了數(shù)據(jù)庫中是否有id=1的數(shù)據(jù),沒有就插入。那么此時事務A未查詢到該數(shù)據(jù)存在,同時事務B執(zhí)行了插入操作插入了id=1的數(shù)據(jù)并且提交。那么事務A再去插入的時候則會報主鍵沖突的錯誤,但是當事務A再一次去查的時候發(fā)現(xiàn)id=1的數(shù)據(jù)仍然是不存在( 前提是已經(jīng)解決了不可重復讀的問題,一個事務多次訪問同一數(shù)據(jù)的結(jié)果是一致的 ),這種情況就稱之為幻讀

事務隔離級別

隔離級別

隔離級別臟讀不可重復讀幻讀
Read uncommitted(讀未提交)×××
Read committed(oracle默認)(讀已提交)××
Repeatable Read(mysql默認)(可重復讀)×
Serializable(可序化)

× --> 無法解決 √ --> 可以解決

在sql中查看當前事務隔離級別

select @@transaction_isolation;

設置當前事務隔離級別

-- 設置事務隔離級別
set [session|global] transaction isolation level {Read uncommitted | Read committed | Repeatable Read |Serializable};

session是指盡在當前會話中使用該事務隔離級別,global表示全局有效

四種事務隔離級別當中,Serializable可序化級別最高。要求序列化執(zhí)行sql指令,事務只能一個接一個的執(zhí)行,不允許并發(fā)執(zhí)行。性能低下

而Read Uncommitted讀未提交性能最好,但是存在臟讀問題等

到此這篇關于MySQL事務與隔離級別的使用基礎理論的文章就介紹到這了,更多相關MySQL事務與隔離級別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL數(shù)據(jù)類型中DECIMAL的用法實例詳解

    MySQL數(shù)據(jù)類型中DECIMAL的用法實例詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)類型中DECIMAL的用法實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • mysql中int(3)和int(10)的數(shù)值范圍是否相同

    mysql中int(3)和int(10)的數(shù)值范圍是否相同

    依稀還記得有次面試,有面試官問我int(10)與int(11)有什么區(qū)別,當時覺得就是長度的區(qū)別吧,后來發(fā)現(xiàn)事情不是這么簡單,這篇文章主要給大家介紹了關于mysql中int(3)和int(10)的數(shù)值范圍是否相同的相關資料
    2021-10-10
  • mysql8.0.21安裝教程圖文詳解

    mysql8.0.21安裝教程圖文詳解

    這篇文章主要介紹了mysql8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • MySQL里的found_row()與row_count()的解釋及用法

    MySQL里的found_row()與row_count()的解釋及用法

    MySQL中有兩個函數(shù)來計算上一條語句影響了多少行,不同于SqlServer/Oracle,不要因為此方面的差異而引起功能問題
    2013-02-02
  • MySQL主從復制與讀寫分離原理及用法詳解

    MySQL主從復制與讀寫分離原理及用法詳解

    這篇文章主要介紹了MySQL主從復制與讀寫分離原理及用法,結(jié)合實例形式詳細分析了mysql數(shù)據(jù)庫主從復制、讀寫分離基本概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-01-01
  • mysql安全啟動腳本mysqld_safe詳細介紹

    mysql安全啟動腳本mysqld_safe詳細介紹

    這篇文章主要介紹了mysql安全啟動腳本mysqld_safe詳細介紹,mysqld_safe增加了一些安全特性,需要的朋友可以參考下
    2014-07-07
  • mysql數(shù)據(jù)庫中1045錯誤的解決方法

    mysql數(shù)據(jù)庫中1045錯誤的解決方法

    這篇文章主要為大家詳細介紹了MySQL數(shù)據(jù)庫中1045錯誤的解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Mysql中的Btree與Hash索引比較

    Mysql中的Btree與Hash索引比較

    這篇文章主要介紹了Mysql中的Btree與Hash索引比較,本文起講解了B-Tree 索引特征、Hash 索引特征等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • mysql5.7.19 winx64安裝配置方法圖文教程(win10)

    mysql5.7.19 winx64安裝配置方法圖文教程(win10)

    這篇文章主要為大家詳細介紹了mysql5.7.19 winx64安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 簡單介紹MySQL中的事務機制

    簡單介紹MySQL中的事務機制

    這篇文章主要介紹了MySQL中的事務機制,通過實例介紹了大概的流程,需要的朋友可以參考下
    2015-04-04

最新評論