1. 程式人生 > >有了事務為什麼還需要樂觀鎖和悲觀鎖

有了事務為什麼還需要樂觀鎖和悲觀鎖

transaction-lock為什麼有了事務這東西,還需要樂觀鎖悲觀鎖?事務是粗粒度的概念、樂觀鎖悲觀鎖可以更細粒度的控制;
比如搶票,假設餘票只有1張;隔離級別可以保證事務A和事務B不能讀到對方的資料,也不能更新對方正在更新的資料,但是事務A和事務B都認為還有1張餘票,於是出票,並更新為0;

事務解決了併發問題,已經不存在併發問題了;

但是事務B讀取的是過時資料,依據過時資料做了業務處理;

所以需要樂觀鎖或者悲觀鎖,來記錄一個資訊:當前已經讀取的資料,是不是已經過時了!

事務有這麼幾種實現方式:鎖協議、MVCC、時間戳排序協議、有效性檢查協議,鎖協議是事務的一種實現方式,事務 = 用鎖封裝的一個函式,可以重用而已,但是這幾個事務的函式覆蓋面太粗粒度了,所以有時候我們還得藉助於鎖來進行細粒度控制; 事務不能保證每個操作結果正確,售票時超賣還是會發生。 事務保證整個操作的成一個組,要麼全做要麼全不做 但是不能保證多個事務同時讀取同一個資料
資料物件被加上排它鎖時,其他的事務不能對它讀取和修改;加了共享鎖的資料物件可以被其他事務讀取,但不能修改 事務可以用鎖實現,可以保證一致性和隔離性,但是鎖用來保證併發性; 隔離性和併發性有點類似,但是隔離性只是保證不會出現相互讀取中間資料,卻無法解決併發的問題