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

MySQL數(shù)據(jù)庫事務隔離級別詳解

 更新時間:2017年03月15日 16:47:24   投稿:lqh  
這篇文章主要介紹了MySQL數(shù)據(jù)庫事務隔離級別詳解的相關資料,需要的朋友可以參考下

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

數(shù)據(jù)庫事務的隔離級別有4個,由低到高依次為

  1. Read uncommitted:允許臟讀。
  2. Read committed: 防止臟讀,最常用的隔離級別,并且是大多數(shù)數(shù)據(jù)庫的默認隔離級別。
  3. Repeatable read:可以防止臟讀和不可重復讀。
  4. Serializable:可以防止臟讀,不可重復讀取和幻讀,(事務串行化)會降低數(shù)據(jù)庫的效率。

這四個級別可以逐個解決臟讀 、不可重復讀 、幻讀 這幾類問題。

√: 可能出現(xiàn) ×: 不會出現(xiàn)

事務級別 臟讀 不可重復讀 幻讀
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

注意:我們討論隔離級別的場景,主要是在多個事務并發(fā)的情況下。

臟讀、幻讀、不可重復讀

臟讀:

臟讀就是指當一個事務正在訪問數(shù)據(jù),并且對數(shù)據(jù)進行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時,另外一個事務也訪問這個數(shù)據(jù),然后使用了這個數(shù)據(jù)。

不可重復讀:

是指在一個事務內(nèi),多次讀同一數(shù)據(jù)。在這個事務還沒有結束時,另外一個事務也訪問該同一數(shù)據(jù)。那么,在第一個事務中的兩次讀數(shù)據(jù)之間,由于第二個事務的修改,那么第一個事務兩次讀到的的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個事務內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復讀。(即不能讀到相同的數(shù)據(jù)內(nèi)容)

幻讀:

是指當事務不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務對一個表中的數(shù)據(jù)進行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時,第二個事務也修改這個表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會發(fā)生操作第一個事務的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。

example:

表:

CREATE TABLE `cc_wsyw126_user_test_isolation_copy` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `password` varchar(64) NOT NULL,
 `age` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `ix_age` (`age`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

模擬數(shù)據(jù):

INSERT INTO `cc_wsyw126_user_test_isolation_copy` (`password`, `age`) 
VALUES 
('1', 1),
('2', 2),
('3', 3),
('4', 4);

第一個事務A:

start transaction 
insert into cc_wsyw126_user_test_isolation_copy (password, age) values ('5',5)
commit

第二個事務B:

start transaction 
update cc_wsyw126_user_test_isolation_copy set age = 2 where password >='2'
select * from cc_wsyw126_user_test_isolation_copy where password >= '2';
commit

重現(xiàn)步驟:

只要A事務的insert語句,在B事務select之前和update之后即可。

MySQL InnoDB存儲引擎,實現(xiàn)的是基于多版本的并發(fā)控制協(xié)議——MVCC (Multi-Version Concurrency Control) 加上間隙鎖(next-key locking)策略在Repeatable Read (RR)隔離級別下不存在幻讀。如果測試幻讀,在MyISAM下實驗。

在聚集索引(主鍵索引)中,如果有唯一性約束,InnoDB會將默認的next-key lock降級為record lock。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Windows下MySQL8.0.18安裝教程(圖解)

    Windows下MySQL8.0.18安裝教程(圖解)

    這篇文章主要介紹了Windows下MySQL8.0.18安裝教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • docker拉取MySQL8.0鏡像以及安裝的完整步驟

    docker拉取MySQL8.0鏡像以及安裝的完整步驟

    這篇文章主要介紹了如何在Docker中安裝和配置MySQL鏡像,包括數(shù)據(jù)掛載、配置文件設置、環(huán)境變量配置以及DBeaver數(shù)據(jù)庫連接的常見問題解決方法,需要的朋友可以參考下
    2025-02-02
  • MySQL開啟事務的方式

    MySQL開啟事務的方式

    本篇文章給大家分享MySQL 是如何開啟一個事務的,原文通過兩種方式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-06-06
  • MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL作為一個存儲數(shù)據(jù)的產(chǎn)品,怎么確保數(shù)據(jù)的持久性和不丟失才是最重要的,感興趣的可以跟隨本文一探究竟,文中通過圖文結合給大家講解的非常詳細,需要的朋友快來跟著小編一起來學習吧
    2023-12-12
  • mysql啟動服務報1058錯誤的解決方法

    mysql啟動服務報1058錯誤的解決方法

    這篇文章主要介紹了mysql啟動服務報1058錯誤的解決方法,需要的朋友可以參考下
    2014-03-03
  • MYSQL事務死鎖問題排查及解決方案

    MYSQL事務死鎖問題排查及解決方案

    這篇文章主要介紹了Java服務報錯日志的情況,并通過一系列排查和優(yōu)化措施,最終發(fā)現(xiàn)并解決了服務假死的問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • RHEL7.5下mysql 8.0.11安裝教程

    RHEL7.5下mysql 8.0.11安裝教程

    這篇文章主要為大家詳細介紹了RHEL7.5下mysql 8.0.11安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL8.0數(shù)據(jù)庫開窗函數(shù)圖文詳解

    MySQL8.0數(shù)據(jù)庫開窗函數(shù)圖文詳解

    開窗函數(shù)為將要被操作的行的集合定義一個窗口,它對一組值進行操作,不需要使用GROUP BY子句對數(shù)據(jù)進行分組,能夠在同一行中同時返回基礎行的列和聚合列,這篇文章主要給大家介紹了關于MySQL8.0數(shù)據(jù)庫開窗函數(shù)的相關資料,需要的朋友可以參考下
    2023-06-06
  • MySQL InnoDB row_id邊界溢出驗證的方法步驟

    MySQL InnoDB row_id邊界溢出驗證的方法步驟

    這篇文章主要給大家介紹了關于MySQL InnoDB row_id邊界溢出驗證的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用MySQL InnoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • IP處理函數(shù)inet_aton()和inet_ntoa()使用說明

    IP處理函數(shù)inet_aton()和inet_ntoa()使用說明

    IP處理函數(shù)inet_aton()和inet_ntoa()使用說明,需要的朋友可以參考下
    2012-03-03

最新評論