老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

mysql怎么加表鎖 mysql 加字段鎖表方案

MySQL - for update 行鎖 表鎖

for update 的作用是在查詢的時候為行加上排它鎖,當一個事務的操作未完成時候,其他事務可以讀取但是不能寫入或更新。

創新互聯是一家專業提供慈利企業網站建設,專注與網站制作、做網站H5高端網站建設、小程序制作等業務。10年已為慈利眾多企業、政府機構等服務。創新互聯專業網站設計公司優惠進行中。

它的典型使用場景是 高并發并且對于數據的準確性有很高要求 ,比如金錢、庫存等,一般這種操作都是很長一串并且開啟事務的,假如現在要對庫存進行操作,在剛開始讀的時候是1,然后馬上另外一個進程將庫存更新為0了,但事務還沒結束,會一直用1進行后續的邏輯,就會有問題,所以需要用for upate 加鎖防止出錯。

行鎖的具體實現算法有三種:record lock、gap lock以及next-key lock。

只在可重復讀或以上隔離級別下的特定操作才會取得 gap lock 或 next-key lock,在 Select、Update 和 Delete 時,除了基于唯一索引的查詢之外,其它索引查詢時都會獲取 gap lock 或 next-key lock,即鎖住其掃描的范圍。主鍵索引也屬于唯一索引,所以主鍵索引是不會使用 gap lock 或 next-key lock

for update 僅適用于InnoDB,并且必須開啟事務,在begin與commit之間才生效。

select 語句默認不獲取任何鎖,所以是可以讀被其它事務持有排它鎖的數據的!

InnoDB 既實現了行鎖,也實現了表鎖。

當有明確指定的主鍵/索引時候,是行級鎖,否則是表級鎖

假設表 user,存在有id跟name字段,id是主鍵,有5條數據。

明確指定主鍵,并且有此記錄,行級鎖

無主鍵/索引,表級鎖

主鍵/索引不明確,表級鎖

明確指定主鍵/索引,若查無此記錄,無鎖

參考博文:

mysql備份數據庫 怎么鎖表

MySQL8.x 中新增了一個輕量級的備份鎖,它允許在 online 備份的時候進行 DML 操作,同時可防止快照不一致。這個鎖禁止的操作很少,它禁止的操作包括:

文件的創建、刪除、改名

賬戶的管理

REPAIR TABLE

TRUNCATE TABLE

OPTIMIZE TABLE

備份鎖由?lock instance for backup?和?unlock instance?語法組成。使用這些語句需要 BACKUP_ADMIN 權限。

mysql讀數據時怎么加寫鎖

加鎖情況與死鎖原因分析

為方便大家復現,完整表結構和數據如下:

CREATE TABLE `t3` (

`c1` int(11) NOT NULL AUTO_INCREMENT,

`c2` int(11) DEFAULT NULL,

PRIMARY KEY (`c1`),

UNIQUE KEY `c2` (`c2`)

) ENGINE=InnoDB

insert into t3 values(1,1),(15,15),(20,20);

在 session1 執行 commit 的瞬間,我們會看到 session2、session3 的其中一個報死鎖。這個死鎖是這樣產生的:

1.?session1 執行 delete ?會在唯一索引 c2 的 c2 = 15 這一記錄上加 X lock(也就是在MySQL 內部觀測到的:X Lock but not gap);

2.?session2 和 session3 在執行 insert 的時候,由于唯一約束檢測發生唯一沖突,會加 S Next-Key Lock,即對 (1,15] 這個區間加鎖包括間隙,并且被 seesion1 的 X Lock 阻塞,進入等待;

3.?session1 在執行 commit 后,會釋放 X Lock,session2 和 session3 都獲得 S Next-Key Lock;

4.?session2 和 session3 繼續執行插入操作,這個時候 INSERT INTENTION LOCK(插入意向鎖)出現了,并且由于插入意向鎖會被 gap 鎖阻塞,所以 session2 和 session3 互相等待,造成死鎖。

死鎖日志如下:

請點擊輸入圖片描述

INSERT INTENTION LOCK

在之前的死鎖分析第四點,如果不分析插入意向鎖,也是會造成死鎖的,因為插入最終還是要對記錄加 X Lock 的,session2 和 session3 還是會互相阻塞互相等待。

但是插入意向鎖是客觀存在的,我們可以在官方手冊中查到,不可忽略:

Prior to inserting the row, a type of gap lock called an insert intention gap lock is set. This lock signals the intent to insert in such a way that multiple transactions inserting into the same index gap need not wait for each other if they are not inserting at the same position within the gap.

插入意向鎖其實是一種特殊的 gap lock,但是它不會阻塞其他鎖。假設存在值為 4 和 7 的索引記錄,嘗試插入值 5 和 6 的兩個事務在獲取插入行上的排它鎖之前使用插入意向鎖鎖定間隙,即在(4,7)上加 gap lock,但是這兩個事務不會互相沖突等待。

當插入一條記錄時,會去檢查當前插入位置的下一條記錄上是否存在鎖對象,如果下一條記錄上存在鎖對象,就需要判斷該鎖對象是否鎖住了 gap。如果 gap 被鎖住了,則插入意向鎖與之沖突,進入等待狀態(插入意向鎖之間并不互斥)。總結一下這把鎖的屬性:

1. 它不會阻塞其他任何鎖;

2. 它本身僅會被 gap lock 阻塞。

在學習 MySQL 過程中,一般只有在它被阻塞的時候才能觀察到,所以這也是它常常被忽略的原因吧...

GAP LOCK

在此例中,另外一個重要的點就是 gap lock,通常情況下我們說到 gap lock 都只會聯想到 REPEATABLE-READ 隔離級別利用其解決幻讀。但實際上在 READ-COMMITTED 隔離級別,也會存在 gap lock ,只發生在:唯一約束檢查到有唯一沖突的時候,會加 S Next-key Lock,即對記錄以及與和上一條記錄之間的間隙加共享鎖。

通過下面這個例子就能驗證:

請點擊輸入圖片描述

這里 session1 插入數據遇到唯一沖突,雖然報錯,但是對 (15,20] 加的 S Next-Key Lock 并不會馬上釋放,所以 session2 被阻塞。另外一種情況就是本文開始的例子,當 session2 插入遇到唯一沖突但是因為被 X Lock 阻塞,并不會立刻報錯 “Duplicate key”,但是依然要等待獲取 S Next-Key Lock 。

有個困惑很久的疑問:出現唯一沖突需要加 S Next-Key Lock 是事實,但是加鎖的意義是什么?還是說是通過 S Next-Key Lock 來實現的唯一約束檢查,但是這樣意味著在插入沒有遇到唯一沖突的時候,這個鎖會立刻釋放,這不符合二階段鎖原則。這點希望能與大家一起討論得到好的解釋。

如果是在 REPEATABLE-READ,除以上所說的唯一約束沖突外,gap lock 的存在是這樣的:

普通索引(非唯一索引)的S/X Lock,都帶 gap 屬性,會鎖住記錄以及前1條記錄到后1條記錄的左閉右開區間,比如有[4,6,8]記錄,delete 6,則會鎖住[4,8)整個區間。

對于 gap lock,相信 DBA 們的心情是一樣一樣的,所以我的建議是:

1. 在絕大部分的業務場景下,都可以把 MySQL 的隔離界別設置為 READ-COMMITTED;

2. 在業務方便控制字段值唯一的情況下,盡量減少表中唯一索引的數量。

鎖沖突矩陣

前面我們說的 GAP LOCK 其實是鎖的屬性,另外我們知道 InnoDB 常規鎖模式有:S 和 X,即共享鎖和排他鎖。鎖模式和鎖屬性是可以隨意組合的,組合之后的沖突矩陣如下,這對我們分析死鎖很有幫助:

請點擊輸入圖片描述

MySQL從入門到精通(九) MySQL鎖,各種鎖

鎖是計算機協調多個進程或線程并發訪問某一資源的機制,在數據庫中,除傳統的計算資源(CPU、RAM、I/O)爭用外,數據也是一種供許多用戶共享的資源,如何保證數據并發訪問的一致性,有效性是所有數據庫必須解決的一個問題,鎖沖突也是影響數據庫并發訪問性能的一個重要因素,從這個角度來說,鎖對數據庫而言是尤其重要,也更加復雜。MySQL中的鎖,按照鎖的粒度分為:1、全局鎖,就鎖定數據庫中的所有表。2、表級鎖,每次操作鎖住整張表。3、行級鎖,每次操作鎖住對應的行數據。

全局鎖就是對整個數據庫實例加鎖,加鎖后整個實例就處于只讀狀態,后續的DML的寫語句,DDL語句,已經更新操作的事務提交語句都將阻塞。其典型的使用場景就是做全庫的邏輯備份,對所有的表進行鎖定,從而獲取一致性視圖,保證數據的完整性。但是對數據庫加全局鎖是有弊端的,如在主庫上備份,那么在備份期間都不能執行更新,業務會受影響,第二如果是在從庫上備份,那么在備份期間從庫不能執行主庫同步過來的二進制日志,會導致主從延遲。

解決辦法是在innodb引擎中,備份時加上--single-transaction參數來完成不加鎖的一致性數據備份。

添加全局鎖: flush tables with read lock; 解鎖 unlock tables。

表級鎖,每次操作會鎖住整張表.鎖定粒度大,發送鎖沖突的概率最高,并發讀最低,應用在myisam、innodb、BOB等存儲引擎中。表級鎖分為: 表鎖、元數據鎖(meta data lock, MDL)和意向鎖。

表鎖又分為: 表共享讀鎖 read lock、表獨占寫鎖write lock

語法: 1、加鎖 lock tables 表名 ... read/write

2、釋放鎖 unlock tables 或者關閉客戶端連接

注意: 讀鎖不會阻塞其它客戶端的讀,但是會阻塞其它客戶端的寫,寫鎖既會阻塞其它客戶端的讀,又會阻塞其它客戶端的寫。大家可以拿一張表來測試看看。

元數據鎖,在加鎖過程中是系統自動控制的,無需顯示使用,在訪問一張表的時候會自動加上,MDL鎖主要作用是維護表元數據的數據一致性,在表上有活動事務的時候,不可以對元數據進行寫入操作。為了避免DML和DDL沖突,保證讀寫的正確性。

在MySQL5.5中引入了MDL,當對一張表進行增刪改查的時候,加MDL讀鎖(共享);當對表結構進行變更操作時,加MDL寫鎖(排他).

查看元數據鎖:

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema_metadata_locks;

意向鎖,為了避免DML在執行時,加的行鎖與表鎖的沖突,在innodb中引入了意向鎖,使得表鎖不用檢查每行數據是否加鎖,使用意向鎖來減少表鎖的檢查。意向鎖分為,意向共享鎖is由語句select ... lock in share mode添加。意向排他鎖ix,由insert,update,delete,select。。。for update 添加。

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_lock;

行級鎖,每次操作鎖住對應的行數據,鎖定粒度最小,發生鎖沖突的概率最高,并發讀最高,應用在innodb存儲引擎中。

innodb的數據是基于索引組織的,行鎖是通過對索引上的索引項加鎖來實現的,而不是對記錄加的鎖,對于行級鎖,主要分為以下三類:

1、行鎖或者叫record lock記錄鎖,鎖定單個行記錄的鎖,防止其他事物對次行進行update和delete操作,在RC,RR隔離級別下都支持。

2、間隙鎖Gap lock,鎖定索引記錄間隙(不含該記錄),確保索引記錄間隙不變,防止其他事物在這個間隙進行insert操作,產生幻讀,在RR隔離級別下都支持。

3、臨鍵鎖Next-key-lock,行鎖和間隙鎖組合,同時鎖住數據,并鎖住數據前面的間隙Gap,在RR隔離級別下支持。

innodb實現了以下兩種類型的行鎖

1、共享鎖 S: 允許一個事務去讀一行,阻止其他事務獲得相同數據集的排他鎖。

2、排他鎖 X: 允許獲取排他鎖的事務更新數據,阻止其他事務獲得相同數據集的共享鎖和排他鎖。

insert 語句 排他鎖 自動添加的

update語句 排他鎖 自動添加

delete 語句 排他鎖 自動添加

select 正常查詢語句 不加鎖 。。。

select 。。。lock in share mode 共享鎖 需要手動在select 之后加lock in share mode

select 。。。for update 排他鎖 需要手動在select之后添加for update

默認情況下,innodb在repeatable read事務隔離級別運行,innodb使用next-key鎖進行搜索和索引掃描,以防止幻讀。

間隙鎖唯一目的是防止其它事務插入間隙,間隙鎖可以共存,一個事務采用的間隙鎖不會阻止另一個事務在同一間隙上采用的間隙鎖。


新聞標題:mysql怎么加表鎖 mysql 加字段鎖表方案
URL網址:http://www.xueling.net.cn/article/ddischs.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 日本韩国欧美一级片 | 黄色免费在线视频网站 | 色777狠狠狠综合伊人 | 催眠教师~淫辱の教室 | 被仇人调教成禁脔h虐 | 麻豆影视在线免费观看 | 国产免费高清视频 | av国产传媒精品免费 | 超碰91在线 | 人禽伦免费交视频播放 | 亚洲成本人片无码免费 | 48国产吹潮在线观看 | 久久精品影视 | 在线高清视频免费观看视频 | 婷婷色一区 | 在线视频欧美一区 | 四虎影视网 | 国产网友愉拍精品视频手机 | 亚洲成在人线a免费77777 | jiuse九色最新地址 | 中国熟女撒尿毛茸茸 | 中国娇小与黑人巨大交导演 | 黑人无码在线精品视频 | av久操| 久久久小视频 | 一区二区三区免费网站 | 国产高清无码黄片亚洲大尺度视频 | 国产精品久久久一本精品 | 国产区图片区小说区亚洲区 | 欧美成人免费在线 | 亚洲小说少妇区图片 | 少妇SPA推油被扣高潮在线观看 | 斗破苍穹年番在线观看 | 欧美精品国产一区二区三区 | 色综合久久夜色精品国产AV | 亚洲精品一区二区三区蜜桃 | 欧美国产精品久久久久久免费 | 国产精品一区免费 | 在教室伦流澡到高潮HBL原神 | 国产色女 | 国产精品高潮呻吟久久a |