Mysql事務、底層實現原理


https://www.jianshu.com/p/081a3e208e32

1) mysql的事務怎么寫:事務提交與回滾

mysql> start transaction;#手動開啟事務
mysql> insert into t_user(name) values('pp');
mysql> commit;#commit之后即可改變底層數據庫數據
mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
|  1 | jay  |
|  2 | man  |
|  3 | pp   |
+----+------+
3 rows in set (0.00 sec)


mysql> start transaction;
mysql> insert into t_user(name) values('yy');
mysql> rollback;
mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
|  1 | jay  |
|  2 | man  |
|  3 | pp   |
+----+------+
3 rows in set (0.00 sec)

 

2)事務的實現原理

  • redolog與undolog
    • redolog:重做日志,實現事務持久性
      • mysql真實數據會先存到緩沖池中,再由后台線程將數據同步到磁盤
      • redolog可以在數據同步失敗的時候恢復數據
    •  

      undolog:回滾日志,用於記錄數據被修改前的信息,實現事務的原子性

      •   
        • update的操作會先將當前數據加入undolog中,然后使用行中的隱藏字段DB_ROLL_PTR回滾字段指向前一個版本的數據
    • MVCC實現:通過在每行記錄的后面保存兩個隱藏的列來實現的
      •   這兩個列, 一個保存了行的創建時間,一個保存了行的過期時間, 當然存儲的並不是實際的時間值,而是系統版本號。
        • undo log :undo log 中記錄某行數據的多個版本的數據。
        • read view :用來判斷當前版本數據的可見性

      •  
        MVCC的實現,是通過保存數據在某個時間點的快照來實現的。也就是說,不管需要執行多長時間,每個事務看到的數據是一致的。 根據事務開始的時間不同,每個事務對同一張表,同一時刻看到的數據可能是不一樣的。不同存儲引擎的MVCC實現是不同的,典型的有樂觀(optimistic)並發控制和悲觀(pessimistic)並發控制。

 


免責聲明!

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



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