悲觀鎖、樂觀鎖、行級鎖、表級鎖

更新丟失:新改的覆蓋先改的,開發中有三種方法解決css

1、將事務級別提升到最高級別TRANSACTION_SERIALIZABLEhtml

操做雙方都要提高級別;查詢使用共享鎖;更新使用更新鎖;一方查詢,一方更新,共享鎖和更新鎖會衝突;當雙方更新鎖,出現死鎖,程序會自動回滾一方操做,從而避免更新丟失mysql

2、悲觀鎖(加的是表級鎖)sql

一方:查詢語句加 for update;另外一方:查詢語句加 for update;當進行更新語句的時候,另外一方不能進行更新操做post

3、樂觀鎖spa

更新語句設置版本號,在指定版本中更新數據htm

一方:update account set money=money-200,version=version+1 where id=1 and version=0;blog

另外一方操做同一個版本號,則不能更新數據索引

另外一方:update account set money=money+200,version=version+1 where id=1 and version=0;事務

若是更新多,查詢少,用悲觀鎖;反之,樂觀鎖

表級鎖,where用的是非主鍵

行級鎖,where用主鍵通常是id

若是用表級鎖,其餘客戶將不能進行查詢操做,所以開發中記得用行級鎖

mysql爲例,有索引而且使用了該索引當條件的時候就是行鎖沒有索引的時候就是表鎖innodb 的行鎖是在有索引的狀況下,沒有索引的表是鎖定全表的.

行級鎖,通常是指排它鎖,即被鎖定行不可進行修改,刪除,只能夠被其餘會話select。行級鎖以前須要先加表結構共享鎖

表級鎖,通常是指表結構共享鎖鎖,是不可對該表執行DDL操做,但對DML操做都不限制。
行級鎖以前須要先加表結構共享鎖

相關文章
相關標籤/搜索