悲觀鎖,就是一種悲觀心態的鎖,每次訪問數據時都會鎖定數據:
mysql
樂觀鎖,就是一種樂觀心態的鎖,每次訪問數據時並不鎖定數據,期待數據並沒做修改,若是數據沒被修改則做具體的業務
sql
多版本併發控制,MVCC
,Multi Version Concurrent Control
,用於實現非鎖定的讀操做。
MySQL的InnoDB的可重複讀隔離級別中是經過在每條記錄中加建立版本
和刪除版本
兩列來實現,這兩列的值是事務的版本號。併發
建立版本
爲當前事務ID刪除版本
爲當前事務ID刪除版本
爲當前事務ID,新增一條更新後的記錄的建立版本
爲當前事務ID若是須要查詢某個事務版本的數據,邏輯以下SQL(只是用SQL表示此邏輯以便理解,內部並不是這樣實現):mvc
select * from table where 建立版本 <= 當前版本 and (刪除版本 is null or 刪除版本 > 當前版本);