首頁 >資料庫 >mysql教程 >MySQL資料庫最佳化(二)—MySQL事務

MySQL資料庫最佳化(二)—MySQL事務

黄舟
黄舟原創
2017-02-27 13:41:521253瀏覽

一、ACID 
Atomicity
    原子性:一個事務被視為一個不可分割的最小工作單元,整個事務要么全執行,要么全部失敗回滾。
Consistency
    一致性:資料庫總是從一個一致性的狀態轉換到另一個一致性的狀態。例如,即使取錢操作失敗,因為交易沒有提交,所以事務所做的修改也不會儲存到資料庫中,資料還是交易執行前的狀態。如果事務執行成功,那麼資料就是執行後的狀態,保持不變。
Isolation
    隔離性:一個事務所所做的修改在提交之前,對其他事務是不可見的。
Durability
    持久性:一旦交易提交,則其所做的修改會永久的儲存到資料庫中。

注意

    正如鎖定的粒度升級會增加系統開銷一樣,事務處理過程也需要資料庫系統做更多額外的工作。一個支援ACID的db通常比不需要支援ACID的資料庫對CPU的處理能力要求更高、需要更多的記憶體和磁碟空間。所以使用者可以透過不同的應用程式場景,選擇mysql多樣的資料庫引擎,靈活應變。    

二、隔離等級
    在SQL標準定義了4中隔離等級。每一種層級的事務隔離性對應著,該事務所所做的修改在事務內部、事務之間的可見性。隔離等級越低,並發性越強,系統開銷越低。
Read Uncommitted
    未提交讀取:此隔離等級的事務,在資料修改過程中,即使沒有提交,其他事務對於這些資料也是可讀的。事務可讀到未提交的資料也稱為髒讀(Dirty Read),由於髒讀在實際應用中會導致許多問題,一般這類隔離等級應用很少。
Read Committed
    提交讀取:(一般資料庫預設交易層級)只有目前交易執行完,把資料提交之後,其他交易才可對這些資料進行讀取。也叫不可重複讀,因為其他交易執行2次查詢可能前後會得到2個不同結果(事務執行前讀一次,執行後讀一次)。
Repeatable Read
    可重複讀取:(Mysql的預設隔離等級)解決了髒讀的問題,該等級保證了在同一事務中,多次讀取的結果是一致的。但仍舊無法解決幻讀問題。幻讀:事務A在讀取一定範圍內資料時,事務B有對該範圍資料進行插入等更新操作,事務A再次讀取該範圍記錄時,會產生幻讀(Phantom Read)。
Serializable 

    可串列化:讀取每一行資料時,都加上鎖定,強制事務序列執行,避免幻讀問題。但容易產生超時和鎖競爭問題。應用程式也相對較少,只有在特別需要保證資料一致性且無並發的情況下才使用該等級。

三、Mysql設定交易隔離等級

    set transaction isolation level read committed;
    新的隔離等級會在下一個事務開始執行時生效。如果需要修改目前交易的隔離級別,可對設定檔進行修改。另外, 在上篇部落格中對mysql提供的兩種支援事務的儲存引擎:InnoDB和NDB Cluster有所介紹。  

 以上就是MySQL資料庫最佳化(二)—MySQL事務 的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn