聲明:本欄目所使用的素材都是凱哥學堂VIP學員所寫,學員有權匿名,對文章有最終解釋權;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。
表級鎖分分兩種
一種只讀
一種是只寫
解鎖語句是 unlocak tables;
只要解鎖
這個用戶鎖定的所有表都會被解除
Lock tables 表名 read;
如果你鎖定的 是只讀模式的話
那所有的用戶都是只讀模式
誰都不能夠對這張表修改了 其他用戶要修改會卡住
自己修改會報錯!
解除鎖或這你這個用戶直接退出
退出鎖就默認解除了!
或者鎖表的用戶執行 unlock tables; 也可以的!
Lock tables 表名 write;
入下圖實驗
A用戶設置只寫模式
自己可以讀也可以寫
但是別的用戶不能寫也不能讀
解鎖兩種辦法
自己用戶直接退出或者執行 unlocak tables;
悲觀鎖就是程序自帶的鎖 比如update delete insert 這些 執行的時候會默認加個鎖 它指的是對數據被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個數據處理過程中,將數據處于鎖定狀態。悲觀鎖的實現,往往依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改數據)。 說白了他就是排他鎖!
樂觀鎖 相對悲觀鎖而言,樂觀鎖假設認為數據一般情況下不會造成沖突,所以在數據進行提交更新的時候,才會正式對數據的沖突與否進行檢測,如果發現沖突了,則讓返回用戶錯誤的信息,讓用戶決定如何去做。那么我們如何實現樂觀鎖呢,一般來說有以下2種方式:
1:使用數據版本(Version)記錄機制實現,這是樂觀鎖最常用的一種實現方式。什么是數據版本? 就是給數據增加一個版本標識,一般是通過為數據庫表增加一個數字類型的 “version” 字段來實現。當讀取數據時,將version字段的值一同讀出,數據每更新一次,對此version值加一。當我們提交更新的時候,判斷數據庫表對應記錄的當前版本信息與第一次【學Java,到凱哥學堂kaige123.com】取出來的version值進行比對,如果數據庫表當前版本號與第一次取出來的version值相等,想等就讓他更新修改,否則認為是過期數據。
2:樂觀鎖定的第二種實現方式和第一種差不多,同樣是在需要樂觀鎖控制的table中增加一個字段,名稱無所謂,字段類型使用時間戳(timestamp), 和上面的version類似,也是在更新提交的時候檢查當前數據庫中數據的時間戳和自己更新前取到的時間戳進行對比,如果一致則OK,否則就是版本沖突。