天天看點

資料庫ACID原則和事務隔離級别

資料庫ACID原則

A:原子性,Atomicity

C:一緻性,Consistency

I:隔離性,Isolation

D:持久性,Durability

在mysql中的innodb引擎,原子性,一緻性,隔離性通過redo和undo實作,redo就是ib_logfile實體檔案,而undo預設在共享表空間ibdata裡面,通過設定參數可以獨立出來.

事務隔離級别

Read Uncommitted(讀未送出):    事務在執行過程中可以看到其他事務沒有送出的插入和更改的資料,缺點是允許髒讀,不允許同時進行寫操作,但允許其他事務讀沒有送出的資料,對查詢的準确性有很大的問題。

Read Committed(讀已送出):    事務在執行過程中可以看到其他事務已經送出的新插入的記錄,而且能看到其他事務已經送出的對已有記錄的更新,即有可能存在重複查詢同一記錄會有不同結果的情況,但是确實是已經送出過的資料,缺點是允許幻讀(之前不存在,但後來已送出的資料),不允許同時進行寫操作,隻允許讀已送出的資料,但允許不可重複讀(兩次讀的資料允許不一緻),oracle和sqlserver的預設隔離級别.

Repeatable Read(可重複讀):    事務在執行過程中可以看到其他事務已經送出的新插入的記錄,但是不能看到其他其他事務對已有記錄的更新,即重複查詢同一記錄是保持一緻的,禁止不可重複讀取和髒讀,但在極端情況下還會有幻讀,總體符合ACID原則,mysql預設的隔離級别.

Serializable(串行化):    事務串行化執行,事務隻能一個接着一個地執行,并且在執行過程中完全看不到其他事務對資料庫所做的更新,缺點是并發能力差,最嚴格的事務隔離,完全符合ACID原則,但是對性能影響比較大。

     本文轉自arthur376 51CTO部落格,原文連結:http://blog.51cto.com/arthur376/1859082,如需轉載請自行聯系原作者