mysql的事務和隔離等級詳解

來源:互聯網
上載者:User

標籤:mysql 隔離等級

Mysql中的事務

事務是DBMS中的執行單位,它是有限的資料庫操作序列組成的。但是並不是所有的資料庫操作序列都能成為事務。一般說來,事務具有如下4個特性(ACID特性):

1、原子性(Automicity):該特性引起的資料庫操作"要麼全部執行,要麼全部不執行"。

2、一致性(Consistency):該特性表示資料庫操作之前和操作之後的最終狀態是一致的。比如,兩個使用者a,b之間相互轉賬,但是最終兩個使用者的總金額是不變的。

3、隔離性(Isolation):多個事務並發執行時,各個事務獨立執行,且各個事務之間的影響最小。

4、持久性(Durability):一旦事務提交執行成功,則系統保證在任何故障下,事務都不會引起不一致性。

 

 

mysql中的髒讀、不可重複讀取和幻讀的概念

髒讀:在Read-Uncommitted隔離等級下的當前事務中可以讀到其他事務還沒有提交的資料 。            

不可重複讀取(non-repeatable reads):在當前事務中,且未提交,且其他事務在修改相關資料時,兩次查詢的結果不一樣,就叫做不可重複讀取。

幻讀:就是當前同一個事務在未提交和提交後的結果不一樣。感覺像幻像一樣。

 

 

mysql中隔離等級分為4種:

1、Read-Uncommited:讀未提交。該隔離等級下的當前事務可以看到其他未提交事務的執行結果。在該層級下會出現髒讀現象。

2、Read-Committed:讀提交。解決了髒讀的問題。在該隔離等級下,當前事務只能看到其他事務提交後的執行結果。因此該隔離等級支援不可重複讀取。大多數資料庫的的預設隔離等級為Read-Committed,但是mysql不是的。

3、Repeatable-Read:重複讀。解決了不可重複讀取的問題。在該層級且當前事務沒有提交的前提下,不管其他事務如何修改資料,每次查詢的結果都是一樣的。一旦當前事務提交,則查詢的結果就是最新的結果。因此會出現幻讀的現象。事務提交前和提交後的結果不一樣。在該層級下,為了提高並發能力,需要藉助MVCC(多版本並發控制)機制來完成。這是mysql的預設隔離等級。

4、Serializable:可序列化。就是事務接著一個一個的串列執行,只有同一個執行個體下的其他事務結束後,才可以執行同一個執行個體下的另一個事務。這樣就解決了幻讀的問題。

 

總結:mysql的四種預設隔離等級所出現的讀取方式:

1、Read-Uncommitted:會出現髒讀、不可重複讀取等現象。

2、Read-Committed:會出現不可重複現象。

3、Repeatable-Read:會出現幻讀現象。

4、Serializable:不會出現髒讀、不可重複讀取、幻讀等現象。

 

由此可見,隔離等級越高,所受到的幹擾越小,消耗系統的資源越多。且最重要的是它們的並發效能越差。

 

 mysql處理事務由2種方法:

1、手動執行事務

        mysql>begin; 或mysql>start  transaction;   ##表示啟動事務

        mysql>rollback;                                           ##撤銷之前所做的修改(復原)

        mysql>commit;                                               ##提交事務

 

2、設定事務的自動認可模式

        mysql>select @@autocommit;     ##查看當前事務是否是自動認可的。0或off表示關閉自動認可;1或on表示開啟自動認可

        set  autocommit=0    ##關閉自動認可功能(只能用於當前會話,這是修改的會話變數)

        set  autocommit=1    ##開啟自動認可功能(只能用於當前會話,這是修改的會話變數)

 

mysql中隔離等級的設定:

mysql>select @@tx_isolation;        ##顯示當前的隔離等級

mysql>set  tx_isolation=‘VALUE‘   ##用來設定隔離等級

 

 

事務的執行狀態:共有5種狀態

1、active:表示當前事務進行中當中

2、部分提交的:表示語句在執行過程中,由於某種原因(如宕機)導致只執行了一部分。因此事務就處於該狀態下。

3、失敗:表示事務沒有執行成功。

4、終止:由於事務執行失敗,因此系統會終止該事務

5、提交成功:表示提交後,事務執行成功。

本文出自 “linux學習之路” 部落格,請務必保留此出處http://xslwahaha.blog.51cto.com/4738972/1581558

mysql的事務和隔離等級詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.