為什麼要使用MVCC技術?
數據庫在不同的隔離級別下需要解決
MVCC在Mysql中的實現:
SELECT時,讀取創建版本號<=當前事務版本號,刪除版本號為空或>當前事務版本號。INSERT時,保存當前事務版本號為行的創建版本號DELETE時,保存當前事務版本號為行的刪除版本號UPDATE時,插入一條新紀錄,保存當前事務版本號為行創建版本號,同時保存當前事務版本號到原來刪除的行MVCC解決了幻讀問題了嗎?
答案是沒有。mvcc只是解決了一部分幻讀的問題,也就是幻讀中的讀問題(因為是快照讀)。
MySQL在RR級別下是通過gap lock解決了當前讀情況下的幻讀問題。
事務的隔離級別只涉及到了讀的問題。並沒有涉及到寫的問題。