悲觀鎖
悲觀鎖,就是一種悲觀心態的鎖,每次訪問數據時都會鎖定數據:

樂觀鎖
樂觀鎖,就是一種樂觀心態的鎖,每次訪問數據時並不鎖定數據,期待數據並沒作修改,如果數據沒被修改則作具體的業務

應用程序上使用樂觀鎖的思想

MySQL的MVCC實現
多版本並發控制,MVCC,Multi Version Concurrent Control,用於實現非鎖定的讀操作。
MySQL的InnoDB的可重復讀隔離級別中是通過在每條記錄中加創建版本和刪除版本兩列來實現,這兩列的值是事務的版本號。
- Insert操作,
創建版本為當前事務ID - Delete操作,
刪除版本為當前事務ID - Update操作,原記錄的
刪除版本為當前事務ID,新增一條更新后的記錄的創建版本為當前事務ID
數據的樣式大概如下圖:

如果需要查詢某個事務版本的數據,邏輯如下SQL(只是用SQL表示此邏輯以便理解,內部並非這樣實現):
select * from table where 創建版本 <= 當前版本 and (刪除版本 is null or 刪除版本 > 當前版本);
問題:可重復讀中MVCC如何保證第1次查詢和第2次查詢的一致性?

