mvcc
併發讀寫
實現思路基於多版本---相對應lbcc基於鎖的併發控制
多版本,讀不加鎖,併發讀寫不衝突
快照讀,讀取歷史版本,不影響其他事務寫
當前讀,讀取當前記錄最新版本,返回的當前記錄加鎖,其他事務不會併發修改這條記錄
快照讀,開啓事務-------------,第一條select生成一張快照,在這個事務中沿用select生成的第一張快照
只要使用同一條sql就使用快照歷史版本,直到事務結束------------
數據行鎖
innodb默認行鎖
悲觀鎖,樂觀鎖
保證併發共享數據更新正常
樂觀鎖不對用戶操作限制,最終對版本號判斷,版本號不相等無效操作,過多資源浪費,用戶無效操作
更新使用version判斷,cur_version = select version from table; update table set ... where version=cur_version
update返回值0,1判斷是否更新成功,提示用戶操作成功或失敗
悲觀鎖,數據庫控制,開啓事務,按先後順序操作,前事務執行---->後續事務等待,事務等待時間長