MySQL事務和隔離級別
連接管理器:
接受請求
創建線程
認證用戶
建立安全連接
併發控制:
最簡單機制是使用鎖
多版本併發控制: MVCC(使用其他機制)
鎖:
讀鎖:共享鎖
寫鎖:獨佔鎖
加鎖: LOCK TABLES tb_name {READ|WRITE};
解鎖: UNLOCK TABLES
鎖粒度:從大到小,MySQL服務器僅支持表級鎖,行鎖需要由存儲引擎完成;
表鎖:
頁鎖:
行鎖:
事務:
RDBMS: ACID (原子性,一致性,隔離性,持久性)
MyISAM:不支持事務
InnoDB:支持事務
事務日誌:爲事務提供ACID兼容性(日誌中只是記錄操作過程)
重做日誌
redo log
撤銷日誌
undo log
隔離性:
隔離級別:
READ UNCOMMITTED:讀未提交
READ COMMITTED:讀提交
REPATABLE READ:可重讀
SERIABLIZABLE:可串行
查詢默認隔離級別:
show global variables like '%iso%';
多事務同時執行:彼此之間互不影響的方式進行並行;
事務之間交互:
通過數據集
事務:CPU, I/O
RDBMS,
ACID:
Automicity:原子性,事務所引起的數據庫操作,要麼都完成,要麼都不執行;
Consistency:一致性,A(3000)-->B(2000)
1:A:3000-->2500,
2: A+B: 4500,
Isolation: 隔離性
事務調度:事務之間影響最小
MVCC:多版本併發控制
Durability:一旦事務成功完成,系統必須保證任何故障都不會引起事務表示出不一致性;
1、事務提交之前就已經寫出數據至持久性存儲;
2、結合事務日誌完成;
事務日誌:順序IO
數據文件:隨機IO
事務的狀態:
活動的:active
部分提交的:最後一條語句執行後
失敗的:
中止的:
提交的:
事務一旦提交就不能撤銷
事務:併發執行
1、提高吞吐量和資源利用率
2、減少等待時間
事務調度:
可恢復調度;
無級聯高度:
併發控制依賴的技術手段:
鎖
時間戳
多版本和快照隔離
START TRANSACTION | BEGIN:啓動事務
SQL
SQL
COMMIT: 提交
ROLLBACK: 回滾
如果沒有明確啓動事務:
autocommit:能實現自動提交,每一個操作都直接提交;
建議:明確使用事務,並且關閉自動提交;
保存點:SAVEPOINT sid
回滾至保存點:ROLLBACK TO sid