mysql自定義加鎖 為MySQL加鎖?

2021-10-18 00:23:16 字數 960 閱讀 2505

在日常操作中,update、insert、delete innodb會自動給涉及的資料集加排他鎖,一般的 select 一般是不加任何鎖的。我們可以使用以下方式顯示的為 select 加鎖。

共享鎖:

select * from table_name where id =10 lock in share mode;

排他鎖:

select * from table_name where id=10 for update;

那麼什麼時候該用共享鎖什麼時候用排他鎖呢?

一般來講,共享鎖主要用在需要資料依存關係時來確認某行記錄是否存在,並確保沒有人對這個記錄進行update或者delete操作(包括加鎖的事物也只能讀)。簡單說就是大家都可以讀資料,但是無法修改(更新或者刪除),因此我認為::共享鎖也是悲觀鎖::的一種實現。

排他鎖是與共享鎖相對應,自身加排他鎖的事物能夠自己發起修改操作,其它事物無法再對該資料加共享或者排他鎖。

這裡需要注意上面說到的一點,由於innodb引擎是行鎖,不管我們在這條資料上加了共享鎖還是排他鎖,簡單的select語句依然可以使用的,因為預設在innodb中select是不加鎖的。

這裡還有一點,上圖中我們寫到乙個 間隙鎖,這是什麼東西?比如:當我們用範圍條件而不是相等條件檢索資料,並請求共享或排他鎖時,innodb會給符合條件的已有資料的索引項加鎖;對於鍵值在條件範圍內但並不存在的記錄,叫做「間隙(gap)」,innodb也會對這個「間隙」加鎖,這種鎖機制就是所謂的間隙鎖(next-key鎖)。它存在的主要目的有乙個是為了解決幻讀問題,因為rr作為innodb的預設事物隔離級別,是存在幻讀問題的,而我們在實際操作中確沒有出現,就是因為這裡做了處理。

關於樂觀鎖是如何加鎖的,這個不同系統有不同的實現,簡單來說,對每乙個資料維護乙個版本號,每次讀取時把版本號讀取出來,更新時版本號+1。然後更新時將讀取的版本號作為條件,如果有其它事物更新了,那麼必然會導致版本號變化,因為本次更新不會成功。這種機制最大程度的保證了併發。

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql自定義函式命名 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

為C 自定義控制項新增自定義事件

大氣象 原文 為c 自定義控制項新增自定義事件 這裡的自定義控制項是由普通控制項組合而成的。希望事件響應 推遲到使用自定義控制項的窗體裡寫。步驟一 新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.這兩個按鈕的共用單擊事件處理 如下 using system using system...