一、悲觀鎖:認爲每次對數據庫的操做(查詢、修改)都是不安全的,所以每次操做都會把這條數據鎖掉,直到本次操做完畢釋放該鎖數據庫
二、樂觀鎖:查詢數據的時候老是認爲是安全的,不會鎖數據;等到更新數據的時候會判斷這個數據是否被人修改過,若是有人修改過了則本次修改失敗安全
一、悲觀鎖:悲觀鎖的內部實現是採用的數據庫內部的鎖機制,一個典型的依賴數據庫的悲觀鎖調用:併發
SELECT * FROM TABLE WHERE ID='1' FOR UPDATE;高併發
這條語句鎖定了TABLE表總id='1'的這條數據,本次事務提交以前(事務提交後會釋放事物終的鎖)外界沒法修改本條記錄,同時也保證了本條數據的準確性;spa
悲觀鎖缺陷:若是在高併發的狀況下,每條數據都排隊按照以上過程去加鎖、運行、解鎖,那麼可想而知執行時間,等待時間是很是長的,用戶體驗是很是差的事務
二、樂觀鎖:樂觀鎖的實現方式有兩種:1是添加version字段每次修過疊加;2是使用updatetime每次更新數據後系統自動更新io
UPDATE TABLE SET NAME='DD' WHERE UPDATETIME='查詢出的時間'AND ID='1'用戶體驗
UPDATETIME也可換成version 在where條件加上這兩天自動更新字段,若是不符合說明有改動date
樂觀鎖缺陷:若是修過特別頻繁衝突特別多的狀況下會致使不少操做都失敗im