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)並發控制。
- redolog:重做日志,實現事務持久性