MySql MVCC是如何實現的-關於autocommit?
阿新 • • 發佈:2021-08-01
關於autocommit
- 檢視autocommit
show variables like 'autocommit';
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
我們可以看到autocommit的值為ON,說明MySql預設是開啟了自動提交事務的。什麼意思呢?我們舉例說明一下:
- 新建表
CREATE TABLE `keyvalue` (
`key` int(11) NOT NULL AUTO_INCREMENT,
`value` int(11) DEFAULT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
- 在終端1中插入一條資料
insert into keyvalue(`value`)values(3);
3.在終端2中查詢,這時候是可以查詢到的
select * from keyvalue where `value`=3;
4.修改autocommit為OFF
set session autocommit=0;
5.重新執行2-3步驟,這時候的終端2中是查不到終端1中插入的資料的,也就是終端1中插入的資料對終端2不可見。
6.在終端1中提交事務,再次在終端2中檢視,這時候就可以檢視到了。
7.總結:
1.當autocommit為ON狀態時,即使沒有手動start transaction開啟事務,mysql預設也會將使用者的操作當做事務即時提交。
2.當autocommit為OFF狀態時,mysql仍然會自動開啟事務,但是需要使用者手動提交,未提交前,A事務對資料庫做的修改對B事務是不可見的。
8.思考:當autocommit為ON狀態時,使用者手動開啟事務,mysql會不會自動提交?
答案是:不會
我們測試一下,先將autocommit設定為ON,然後在終端1手動開啟一個事務,在終端2中查詢,從結果來看,在未手動提交前,終端2中是檢視不到的。