1. 程式人生 > >MySQL中樂觀鎖、悲觀鎖、共享鎖、排它鎖、行鎖、表鎖的概念

MySQL中樂觀鎖、悲觀鎖、共享鎖、排它鎖、行鎖、表鎖的概念

樂觀鎖

樂觀鎖是指在操作資料庫時(更新操作),想法很樂觀,認為此次操作不會導致衝突,所以在操作資料時,不進行任何其他的特殊處理(也就是不加鎖),而在進行更新後,再去判斷是否有衝突。

悲觀鎖

悲觀鎖是指在操作資料庫時(更新操作),想法很悲觀,認為此次操作會出現衝突,所以在進行每次操作時都要通過獲取鎖才能進行對相同資料的操作,悲觀鎖需要耗費較多的時間。類似java中的synchronized

共享鎖和排它鎖是悲觀鎖的不同的實現,都屬於悲觀鎖的範疇。

共享鎖

共享鎖是指對於多個不同的事務,對同一個資源共享同一個鎖。相當於對於同一把門,擁有多個鑰匙。例如,你家有一個大門,大門的鑰匙有好幾把,你有一把,你家人有一把,你們都可能通過這把鑰匙進入你們家,這個就是所謂的共享鎖。

排它鎖

排它鎖是指對於多個不同的事務,對同一個資源只能有一把鎖。

與共享鎖型別,在需要執行的語句後面加上for update就可以了

行鎖

行鎖,給某一行加上鎖。 偏向寫,InnoDB引擎,粒度小,併發高,可能造成死鎖。

set autocommit = 0;

更新語句

commit;

表鎖

表鎖,給表加鎖。偏向讀,MyISAM引擎,粒度大,併發低,不會造成死鎖。

lock table 表名1 read/write, 表名2 read/write, ... ;