日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁

發布時間:2025/3/15 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:概述

相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);InnoDB存儲引擎既支持行級鎖( row-level locking),也支持表級鎖,但默認情況下是采用行級鎖。

MySQL主要的兩種鎖的特性可大致歸納如下:

? 表級鎖: 開銷小,加鎖快;不會出現死鎖(因為MyISAM會一次性獲得SQL所需的全部鎖);鎖定粒度大,發生鎖沖突的概率最高,并發度最低。

? 行級鎖: 開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。

考慮上述特點,表級鎖使用與并發性不高,以查詢為主,少量更新的應用,比如小型的web應用;而行級鎖適用于高并發環境下,對事務完整性要求較高的系統,如在線事務處理系統。

二:MyISAM鎖細述

(1). 鎖模式

MySQL的表級鎖有兩種模式: 表共享讀鎖(Table Read Lock)和表獨占寫鎖(Table Write Lock)。

(2). ?如何加鎖

當MyISAM在執行查詢語句時,會自動給涉及到表加讀鎖,在執行更新操作時,會加寫鎖。當然用戶也可以用LOCK TABLE 去顯式的加鎖。顯式的加鎖一般是應用于:需要在一個時間點實現多個表的一致性讀取,不然的話,可能讀第一個表時,其他表由于還沒進行讀操作,沒有自動加鎖,可能數據會發生改變。并且顯示加鎖后只能訪問加鎖的表,不能訪問其他表。

(3). 并發插入

MyISAM存儲引擎有個系統變量 concurrent_insert,專門用來控制并發插入的行為,可以取 0 , 1 , 2。

0表示不允許并發插入,1表示表中間沒有刪除的行時可以在表末尾插入,2表示總是可以插入。

一般如果對并發要求比較高的情況下,可以設置為2,總是可以插入,然后定期在數據庫空閑時間對表進行optimize。

(4). 鎖的調度

需要注意的是,其中讀操作不會阻塞其他用戶對同一表的讀請求,但會阻塞對同一表的寫請求;并且當寫鎖和讀鎖同時被申請時,優先獲得寫鎖,這也這正是表級鎖發生鎖沖突概率最高的原因,因為寫鎖可能會一直阻塞讀鎖,所以不適合有大量寫操作的環境下工作。這一問題可以通過設置low-priority-updates這一啟動參數來降低寫的優先級。

雖然寫鎖優先于讀鎖獲取,但是長時間的查詢操作也可能會讓寫操作餓死,所以盡量避免一條SQL語句執行所有的查詢,應該進行必要的分解。

三:InnoDB鎖細述

由于InnoDB支持事務,并默認是使用行級鎖,所以InnoDB的鎖問題和MyISAM鎖問題還是有蠻大差別的。

(1). 鎖模式

共享鎖(S)和排他鎖(X),分別類似于MyISAM的讀鎖和寫鎖。對于 UPDATE、 DELETE 和 INSERT 語句,InnoDB會自動給涉及數據集加排他鎖(X);對于普通 SELECT 語句,InnoDB不會加任何鎖。

(2). 如何加鎖

可以顯式的加鎖,用lock in share mode 顯式的加共享鎖,用 for update 顯式的加排他鎖。

需要注意的是,如果線程A加了共享鎖后,線程B對同一個表加了共享鎖,那么兩個線程需要進行更新操作時會產生死鎖。所以,進行更新操作時最好加排他鎖。

(3). InnoDB行鎖的實現方式——索引加鎖

這一點與Oracle不同,所以這也意味著(重要):1. 只有通過索引條件檢索數據時,InnoDB才會使用行級鎖,否則會使用表級鎖。 2. 即使是訪問不同行的記錄,如果使用的是相同的索引鍵,會發生鎖沖突。 3. 如果數據表建有多個索引時,可以通過不同的索引鎖定不同的行。

(4). 間隙鎖

InnoDB支持事務,為了滿足隔離級別的要求,InnoDB有個間隙鎖,當使用范圍查找時,InnoDB會給滿足key范圍要求,但實際并不存在的記錄加鎖。例如:select * from user where id > 100 for updata 會給ID>100的記錄加排他鎖,滿足這個范圍,但不存在的記錄,會加間隙鎖,這樣可以避免幻讀,避免讀取的時候插入滿足條件的記錄。

(5). 隔離級別與鎖

一般來說,隔離級別越高,加鎖就越嚴格。這樣,產生鎖沖突的概率就越大,一般實際應用中,通過優化應用邏輯,選用 可提交讀 級別就夠了。對于一些確實需要更高隔離級別的事務,再通過set session transaction isolation level+"級別" 來動態改變滿足需求。

四:死鎖

MyISAM是沒有死鎖問題的,因為他會一次性獲得所有的鎖。InnoDB發生死鎖后一般能自動檢測到,并使一個事務釋放鎖并回退,另一個事務獲得鎖,繼續完成事務。

在應用中,可以通過如下方式來盡可能的避免死鎖:

(1) 如果不同的程序會并發的存取多個表,應盡量約定以相同的順序來訪問表,這樣可以大大降低產生死鎖的機會。

(2) 在程序以批量方式處理數據時,如果事先對數據排序,保證每個線程按固定的順序來處理記錄,也可以大大的降低出現死鎖的可能。

總結

以上是生活随笔為你收集整理的mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产专区 | 又黄又爽又刺激的视频 | 69日影院 | 久久亚洲免费视频 | 亚洲成人麻豆 | 特黄大片又粗又大又暴 | 欧美tv| ass大乳尤物肉体pics | 中文字幕一区二区三区不卡 | 免费观看黄色网页 | av观看免费在线 | av网站天堂 | 香蕉视频网页版 | 中文字幕欧美亚洲 | 美痴女~美人上司北岛玲 | 人人入人人 | 国产精品5 | www.亚色 | 日本在线观看a | 成人免费高清在线观看 | 日本国产网站 | 永久免费看片在线播放 | 国产视频网站在线观看 | 91们嫩草伦理 | 亚洲欧美另类自拍 | 国产精品一卡 | 91精品国自产在线偷拍蜜桃 | 波多野结衣av中文字幕 | 蜜桃免费在线视频 | 国产鲁鲁视频在线观看免费 | 美日韩免费 | 成人看片黄a免费看视频 | av永久网站 | 色窝av | 成人免费影视网站 | 麻豆成人精品 | 青娱乐国产在线 | 天堂在线1| 白白色在线播放 | 口爆吞精一区二区三区 | 18+视频在线观看 | 亚洲一区二区三区在线免费观看 | 亚洲特黄一级片 | 成人区视频 | 久久久久久久国产视频 | 五月婷婷色丁香 | 国产视频日本 | 91性高潮久久久久久久久 | 欧美另类极品videosbest使用方法 | 亚洲AV成人午夜无码精品久久 | 亚洲美女精品视频 | 亚洲免费影视 | 成人av中文解说水果派 | 国产亚洲精品久久久久久777 | 伊人草| 亚洲一区二区精品在线观看 | 久久久久久久久久久影视 | 免费视频精品 | 亚洲精品一区二区三区蜜桃久 | av成人精品 | 国产成人综合在线观看 | 丝袜美腿一区二区三区 | 色七七视频| 国产伦精品一区二区三区妓女 | 7777精品视频 | 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 日韩激情在线播放 | 黄色网址在线免费播放 | 最好看的2019年中文在线观看 | 中文字幕免费在线播放 | 人人人妻人人澡人人爽欧美一区 | 欧美少妇b | 中文字幕亚洲在线 | 亚洲另类自拍 | 国产视频久久久久久 | 成人免费短视频 | 日本免费网址 | 国产一级片播放 | 一区二区三区欧美在线 | 中文字幕韩日 | 五月天青青草 | 在线视频亚洲欧美 | 亚洲一区二区三区在线免费观看 | 啊灬啊灬啊灬秀婷 | aaa毛片视频 | 精品福利在线 | 日韩欧美高清 | 少妇太紧太爽又黄又硬又爽小说 | 性猛╳xxx乱大交 | 色天天天| 疯狂撞击丝袜人妻 | 丰满少妇一区二区 | 欧美性猛交xxxx乱大交 | av收藏小四郎最新地址 | 亚洲一区二区高清视频 | 亚洲国产大片 | 草草在线免费视频 | 亚洲精品午夜国产va久久成人 | 国产精品麻豆一区二区三区 |