mysql樂觀鎖和悲觀鎖初認知

2021-10-03 20:21:02 字數 748 閱讀 4844

1-1、概念 :它指的是對資料被外界(包括當前系統的其它事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。

1-2、悲觀鎖的實現方式 :

1-2-1、首先設定mysql的提交方式為非自動提交(手動提交):set autocommit=0;

1-2-3、手動開啟事務,select... ...for update;手動提交事務。

例子:

2-1、概念:樂觀鎖相對悲觀鎖而言,它認為資料一般情況下不會造成衝突,所以在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則讓返回錯誤資訊,讓使用者決定如何去做。

2-2、樂觀鎖的實現方式(cas):

2-2-1、為表中新增乙個 version 字段。

2-2-2、當讀取資料時,連同這個 version 字段一起讀出。

2-2-3、資料每更新一次就將此值加一。

2-2-4、當提交更新時,判斷資料庫表中對應記錄的當前版本號是否與之前取出來的版本號一致,如果一致則可以直接更新,如果不一致則表示是過期資料需要重試或者做其它操作。

例子:select  當前版本號 from employee where ***=***x;

update employee set money = #, version = # + 1 where id = # and # = version

MySQL 樂觀鎖和悲觀鎖

共享鎖 s鎖 又稱讀鎖,若事務t對資料物件a加上s鎖,則事務t可以讀a但不能修改a,其他事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。這保證了其他事務可以讀a,但在t釋放a上的s鎖之前不能對a做任何修改。排他鎖 x鎖 又稱寫鎖。若事務t對資料物件a加上x鎖,事務t可以讀a也可以修改a,其...

Mysql 樂觀鎖和悲觀鎖

假定每次操作都不會產生衝突,一般使用cas進行解決。update set num num 1 where num and name 假定每次操作都會衝突,都需要加鎖解決。select for update 結果集中的任何行資料使用排他鎖或共享鎖,否則申請會阻塞for update僅適用於innodb...

mysql 樂觀鎖和悲觀鎖

悲觀鎖與樂觀鎖是兩種常見的資源併發鎖設計思路,也是併發程式設計中乙個非常基礎的概念。本文將對這兩種常見的鎖機制在資料庫資料上的實現進行比較系統的介紹。悲觀鎖 pessimistic lock 悲觀鎖的特點是先獲取鎖,再進行業務操作,即 悲觀 的認為獲取鎖是非常有可能失敗的,因此要先確保獲取鎖成功再進...