簡單聊聊事物的四大特性,四大特性的實現原理。


事物的四大特性?
    ACID
    1.原子性 atomicity
        一個事物是一個不可分割的工作單位,其中的操作,要么都做,要么不做。不存在中間狀態。
    2.一致性 consisitency
        事物執行的前后,數據必須處於一種合法的狀態。(可以自己定義 ,保持數據的一致性。)
    3.隔離性 lsolation
        多個事物並發執行的時候,事物內部的操作與其他事物是隔離的,並發執行,互不干擾。
    4.持久性 Durability
        事物一旦提交,對數據庫的改變是永久性的。不受任何影響。

四大特性的實現原理?
    1.mysql如何保證一致性的?
        兩個層面。
/*        
        1.數據庫    通過原子性, 持久性,隔離性,來保證一致性。
                    AID 三大特性,是前提。
        2.應用層面    通過代碼判斷數據庫數據是否有效,然后再決定是回滾還是提交數據。
*/

    2.mysql怎怎么保證原子性的?
    /*
1.利用innodb的undo log。 叫做回滾的日志

        當事務回滾的時候,能夠撤銷所有已經成功執行的SQL語句,需要記錄你要回滾的響應日志
2.舉例說明        
        當你update一條數據,需要記錄之前的舊值,回滾的時候,根據舊值進行update操作。
            
        undo log 記錄了這些回滾需要的信息,當事務執行失敗,就可以以利undo log 中的信息
        將數據回滾到修改之前的樣子。
    */
        
    3.mysql怎么保持久性的?
    /*
1.        是利用innodb 的 redo log。、

        mysql把磁盤上的數據加載到內存中,在內存中對數據進行修改,在刷回磁盤上。
        此時宕機,內存中的數據就會丟失。
        
2.如何避免宕機?        
        在事物提交之前將數據寫入磁盤中。--------【引發的問題。】》只修改一個頁面里的一個字節,就要將整個頁面刷入磁盤,太浪費資源了
        
        畢竟一個事務里的SQL可能牽涉到多個數據頁的修改,而這些數據頁可能不是相鄰的,
        也就是屬於隨機IO。顯然操作隨機IO,速度會比較慢。
        
3.采用redo log?
        做數據修改的時候,不僅在內村中操作,還會在redo  log 中記錄這次操作,
        提交事物的時候,會將redo log 日志進行刷盤 redo log 一部分在內存中,一部分在磁盤上。
        數據庫宕機重啟,就將redo log中的內容恢復到數據庫中,再根據undo log 和binlog 內容決定
        回滾還是提交數據。
4.好處?    
        redo log 體積小,只記錄了那一頁修改了什么,體積小,刷盤快。
        一直往末尾進行追加,屬於順序io.效率比隨機io來快。
    */
    
    4.mysql怎么保證隔離性的。
/*
    利用鎖 和mvcc 機制。
    
    MVCC,即多版本並發控制(Multi Version Concurrency Control),
    一個行記錄數據有多個版本對快照數據,這些快照數據在undo log中。
    
    如果一個事務讀取的行正在做DELELE或者UPDATE操作,
    讀取操作不會等行上的鎖釋放,而是讀取該行的快照版本。
    
    在事務隔離級別為讀已提交(Read Commited)時,一個事務能夠讀到另一個事務已經提交的數據,
    是不滿足隔離性的。但是當事務隔離級別為可重復讀(Repeateable Read)中,是滿足隔離性的。
*/    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM