mysql學習日記之鎖

2021-06-21 15:30:19 字數 984 閱讀 6145

在當前事務中包含select.......lock in share mode時,就是所謂的共享鎖,就是確保某行記錄存在,在該事務獲得共享鎖的同時,其他事務也可以獲得共享鎖。如果在這個時候某個事務開始進行跟新操作,這個事務會等待,如果這個時候有其他事務也進行更新操作,則會造成死鎖,系統會直接乾掉後面的,按照第乙個進行更新。

在事務中如果乙個事務獲得排他鎖,則這個時候其他事務都不能獲得排他鎖,當獲得排他鎖的事務完成更新操作以後,其他事務才可以獲得。

當兩個事務同時包含lock in share mode的時候,並且涉及當相同的記錄時會產生死鎖,mysql會自動檢測並且將第二個直接乾掉,這個就是select ... lock in share mode和select...for update的區別,lock in share mode允許不排斥lock in share mode,for update排斥一切。

在預設情況下,innodb資料表驅動程式在遇到帶有範圍條件表示式(比如where id>100 或 where id between 100 and 200)的select ... lock in share mode、select ... for update 、update、delete命令還會給他們加上一把防插入鎖(gap and next key lock),將鎖住符合條件的現在或者將來的記錄。

innodb行鎖是通過給索引上的索引項加鎖來實現的,這與oracle是不同的,oracle是通過在資料塊中對相應的資料塊加鎖來實現的,這就意味著只用通過索引條件檢索資料,innodb才使用行級鎖,否則使用表鎖。不注意這點會導致大量的鎖衝突。

防插入鎖或者說是間隙鎖,看例子,如果在乙個表中有100條記錄id分飛1-100,這時候我們用select * from table_name where id>99 for update;這個時候innodb不僅會為id為100的記錄加鎖也會為id大於100的記錄加鎖,雖然這些記錄並不存在,這是為了防止這時候有使用者插入符合條件的值。這時其他事務不能插如那些符合剛才檢索條件的記錄,只有等到鎖釋放以後,才可以插入。

mysql 學習日記 悲觀和樂觀鎖

理解 悲觀鎖就是什麼事情都是需要小心翼翼,生怕弄錯了出大問題,一般情況下 增刪改 都是有事務在進行操作的,但是 查 是不需要事務操作的,但是凡事沒有例外,比如雙十一購物,很多人搶購乙個物品,但是商品總數 假設5個 同一時間進行操作,每個人都能看到物品多少個,都早同一時間下單,但是只有5個商品,只有5...

mysql學習日記之索引

在mysql資料庫中,資料的查詢是我們經常用到的操作。在查詢的時候,我們經常是根據一些條件進行過濾而不是把所有的記錄都查詢出來,當乙個表中的記錄很多的時候,有時候我們查詢一條記錄可能需要遍歷整張表,這樣效率是非常低下的,建立索引可以有效提高查詢效率。簡單的分,索引可以分為單列索引和組合索引 單列索引...

Mysql學習日記

今天在csdn看到了乙個笑話,是這麼寫的 程式猿的讀書歷程 x語言入門 x語言應用實踐 x語言高階程式設計 x語言的科學與藝術 程式設計之美 程式設計之道 程式設計之禪 頸椎病 指南。然後我默默看了看書架,任重而道遠啊,感覺自己還要努力,爭取早日讀到勁椎病 指南 今天花時間複習了mysql的列資料型...