MySQL中樂觀鎖、悲觀鎖、共享鎖、排它鎖、行鎖、表鎖的概念
阿新 • • 發佈:2018-12-11
樂觀鎖
樂觀鎖是指在操作資料庫時(更新操作),想法很樂觀,認為此次操作不會導致衝突,所以在操作資料時,不進行任何其他的特殊處理(也就是不加鎖),而在進行更新後,再去判斷是否有衝突。
悲觀鎖
悲觀鎖是指在操作資料庫時(更新操作),想法很悲觀,認為此次操作會出現衝突,所以在進行每次操作時都要通過獲取鎖才能進行對相同資料的操作,悲觀鎖需要耗費較多的時間。類似java中的synchronized
共享鎖和排它鎖是悲觀鎖的不同的實現,都屬於悲觀鎖的範疇。
共享鎖
共享鎖是指對於多個不同的事務,對同一個資源共享同一個鎖。相當於對於同一把門,擁有多個鑰匙。例如,你家有一個大門,大門的鑰匙有好幾把,你有一把,你家人有一把,你們都可能通過這把鑰匙進入你們家,這個就是所謂的共享鎖。
排它鎖
排它鎖是指對於多個不同的事務,對同一個資源只能有一把鎖。
與共享鎖型別,在需要執行的語句後面加上for update就可以了
行鎖
行鎖,給某一行加上鎖。 偏向寫,InnoDB引擎,粒度小,併發高,可能造成死鎖。
set autocommit = 0;
更新語句
commit;
表鎖
表鎖,給表加鎖。偏向讀,MyISAM引擎,粒度大,併發低,不會造成死鎖。
lock table 表名1 read/write, 表名2 read/write, ... ;