91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql InnoDB的事務特征和隔離級別詳解

發布時間:2021-09-16 07:21:27 來源:億速云 閱讀:98 作者:chen 欄目:大數據

本篇內容主要講解“Mysql InnoDB的事務特征和隔離級別詳解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mysql InnoDB的事務特征和隔離級別詳解”吧!

Mysql-innodb-事務特征ACID

1.原子性(Atomicity):每一個事務都是一個不可分割的執行單元,該執行單元中包含一組的數據庫的操作,要么都執行成功,要么執行失敗全部回滾。
2.一致性(consistency):一致性體現在事務完成之后,所有的數據狀態都是一致的。
3.隔離性(isolation):事務與事務執行時對數據的可見性隔離級別定義,根據不同的隔離程度,來控制讀寫的數據可見性,一般的指事物與事物之間是相互隔離的,互相獨立的。下面會詳細描述不同的隔離級別。
4.持久性(durability):事務執行完,數據的狀態將會永久的保存下來。

前言

     在說之前我們先了解一下臟讀,不可重復讀,可重復讀,幻象讀概念:
1.臟讀:就是事務可以讀到其他事務未提交的事務,但是在實際應用開發中一般的不能出現這種情況,讀到不可靠的數據,導致出現異常數據,但是相信存在既有價值,臟讀的好處是讀取時不會對表或記錄行加鎖,也就是讀寫的時候不會阻塞等待,適合一些更新特別頻繁的數據操作,并且不會場景中事務之間不會出現交叉查詢。
2.不可重復讀:就是事務中多次讀取一條記錄和最開始的讀取結果不一致。如果一個事務中,讀取操作不加排他鎖,當多次執行一樣的select 語句時,命中的數據行可能已經被其它事務修改了,這時候,就讀到了其他結果,這就是不可重復讀。
3.可重復讀:就是事務中多次讀取一條記錄和最開始的讀取結果一致。所以mysql-innodb默認的隔離級別就是它,也是因為事務開始的時候就會對相關的行記錄加鎖。
4.幻象讀:是指兩次執行同一條 select 語句會出現不同的結果,第二次讀會增加一數據行,例如事務A更新數據,事務B在對更新后的結果進行了更新后隨后同一事務中的SELECT能夠看到B事務操作完成后之前不存在的記錄。這時候和可重復讀不一樣,這里是出現新增或者刪除行。

事務的隔離級別

    這里討論mysql數據庫Innodb的事務隔離級別,從低到高。
1.讀未提交(Read UnCommitted)簡稱RU:其他事務可以讀到未提交的事務,該級別是最低的隔離,會出現臟讀現象。
2.讀已提交(Read Committed)簡稱RC:只能讀取到已提交的事務,可以防止臟讀,但是會出現不可重復讀,就是同一個事務中對同一條數據查詢可能會出現不同的結果。也會造成幻讀現象;
3.可重復讀(Repeatable Read)簡稱RR:是Mysql-innodb引擎默認的隔離級別。同一個事務中對同一條數據重復查詢的結果和最開始查詢的結果是一致的,就是可以重復讀。雖然該隔離級別消除了不可重復讀,但是一般的數據庫引擎還是會存在幻象讀,但是innoDB解決了幻讀。

InnoDB使用Next-key Lock來解決”幻讀“。InnoDB默認事務隔離級別為REPEATABLE READ,該隔離級別下InnoDB使用Next-key Lock來鎖住相關索引記錄以及記錄之前的”間隙“,以保證其他session中的事務不僅不能更新記錄而且不能在其中插入數據,從而避免”幻讀“問題。InnoDB中通過Record Lock, Gap Lock 和Next-Key Lock鎖機制來實現訪問控制,這里今天不做過多討論。下一篇將詳細討論。

4.串行化(Serializable):這是最高的隔離級別,每個事務都會串行化處理,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞。

隔離級別總結

隔離級別臟讀不可重復讀幻讀
未提交讀(Read uncommitted)可能可能可能
已提交讀(Read committed)不可能可能可能
未提交讀(Read uncommitted)不可能不可能可能(mysql-innodb不會)
未提交讀(Read uncommitted)不可能不可能不可能

mysql鎖知識擴展

      上面講了很多鎖相關的概念,下面簡單的快速帶入理解一下概念,不做具體詳細分析。mysql鎖機制分為表級鎖和行級鎖,頁級鎖。行鎖中有共享鎖和排他鎖之分。
1.表級鎖:就是鎖住整張表,開銷小,加鎖速度快,鎖粒度大,鎖的資源多,沖突概率高,容易發生死鎖,并發極低。
2.行級鎖:就是記錄行,定位開銷大,加鎖速度慢,粒度小,鎖住資源小,發生沖突概率小,并發相對高。
3.頁面鎖:介于表和行之間,給相鄰一組記錄加鎖,并發一般。

行級鎖細分-共享鎖&排他鎖

      行級鎖細分-共享鎖&排他鎖
1.共享鎖又稱為讀鎖,簡稱S鎖,顧名思義,共享鎖就是多個事務對于同一數據可以共享一把鎖,都能訪問到數據,但是只能讀不能修改。
2.排他鎖又稱為寫鎖,簡稱X鎖,顧名思義,排他鎖就是不能與其他所并存,它是獨占的。如一個事務獲取了一個數據行的排他鎖,其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務是可以對數據就行讀取和修改。

備注:這里說一下排他鎖:mysql InnoDB引擎默認的隔離級別在修改數據語句,update,delete,insert都會自動給涉及到的數據加上排他鎖。select語句默認不會加任何鎖類型,如果想加排他鎖可以使用select …for update語句,共享鎖可以使用select … lock in share mode。所以加過排他鎖的數據行在其他事務種是不能修改數據的,也不能通過for update和lock in share mode鎖的方式查詢數據,但可以直接通過select …from…查詢數據,因為普通查詢沒有任何鎖機制。

樂觀鎖和悲觀鎖

      有的人問樂觀鎖和悲觀鎖又是啥?這里也說一下,本人覺得樂觀鎖和悲觀鎖并不是數據庫專有的,任何的鎖機制都會相關概念,不要和行鎖表鎖和共享排他鎖弄混了,悲觀和樂觀鎖其實是一種并發控制。這里說一下數據庫的樂觀鎖和悲觀鎖的實現。
1.樂觀鎖:使用數據庫版本號或者時間戳方式實現,并發訪問,當兩次操作都是相同的版本號,則認為可以執行。樂觀鎖假設認為數據一般情況下不會造成沖突,所以在數據進行提交更新的時候,才會正式對數據的沖突與否進行檢測,如果發現沖突了,則讓返回用戶錯誤的信息,讓用戶決定如何去做。
2.悲觀鎖:是先獲取鎖,再操作的方式,如果沒有獲得鎖,則拋出異常或者等待釋放鎖。數據庫中也是通過行鎖,表鎖等機制進行訪問控制的。

到此,相信大家對“Mysql InnoDB的事務特征和隔離級別詳解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉善县| 依安县| 大庆市| 大新县| 郴州市| 申扎县| 花垣县| 孝感市| 兰溪市| 福海县| 简阳市| 望奎县| 威远县| 库伦旗| 昌乐县| 康平县| 冕宁县| 贡山| 保德县| 平果县| 洛川县| 通化市| 桂平市| 那坡县| 仁怀市| 孝昌县| 随州市| 濉溪县| 三门县| 平乡县| 丹寨县| 商水县| 杭锦旗| 哈密市| 孟州市| 新河县| 芒康县| 安吉县| 临沧市| 铁岭县| 石阡县|