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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql 的表级锁和行级锁

發(fā)布時(shí)間:2023/12/20 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql 的表级锁和行级锁 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

表級(jí)鎖

MySQL表級(jí)鎖分為讀鎖和寫鎖。

讀鎖

用法:LOCK TABLE table_name [ AS alias_name ] READ

釋放鎖使用UNLOCK tables.可以為表使用別名,如果一旦使用別名在使用的時(shí)候也必須采用別名。成功申請讀鎖的前提是當(dāng)前沒有線程對該表使用寫鎖,否則該語句會(huì)被阻塞。申請讀鎖成功后,其他線程也可以對該表進(jìn)行讀操作,但不允許有線程對其進(jìn)行寫操作,就算是當(dāng)前線程也不允許。當(dāng)鎖住了A表之后,就只能對A表進(jìn)行讀操作,對其他表進(jìn)行讀操作會(huì)出現(xiàn)錯(cuò)誤(tablename?was not locked with LOCK TABLES)

寫鎖

用法:?LOCK TABLE table_name [AS alias_name] [ LOW_PRIORITY ] WRITE

同樣也可以使用別名,與讀鎖不同的是,寫鎖中可以指定鎖的優(yōu)先級(jí)。LOW_PRIORITY是一種比讀鎖更低優(yōu)先級(jí)的鎖,當(dāng)多個(gè)線程同時(shí)申請多種鎖(LOW_PRIORITY,READ,WRITE)時(shí),LOW_PRIORITY的優(yōu)先級(jí)最低。讀鎖申請成功的前提是沒有線程對表加讀鎖和其他寫鎖,否則會(huì)被阻塞。

表級(jí)鎖在MyISAM和innoDB中都有用到,創(chuàng)建鎖的開銷小,不會(huì)出現(xiàn)死鎖,由于鎖定的是整張表,所以并發(fā)度低。當(dāng)需要頻繁對大部分?jǐn)?shù)據(jù)做 GROUP BY 操作或者需要頻繁掃描整個(gè)表時(shí),推薦使用表級(jí)鎖。

行級(jí)鎖

行級(jí)鎖是Mysql中鎖定粒度最細(xì)的一種鎖,能大大減少數(shù)據(jù)庫操作的沖突,由于其粒度小,加鎖的開銷最大。行級(jí)鎖分為共享鎖和排他鎖。

共享鎖(S LOCK)

用法:SELECT ...LOCK IN SHARE MODE; Mysql會(huì)對查詢結(jié)果中的每行都加共享鎖,當(dāng)沒有其他線程對查詢結(jié)果集中的任何一行使用排他鎖時(shí),可以成功申請共享鎖,否則會(huì)被阻塞。其他線程也可以讀取使用了共享鎖的表,而且這些線程讀取的是同一個(gè)版本的數(shù)據(jù)。

排他鎖(X LOCK)

用法:SELECT ...LOCK FOR UPDATE; Mysql會(huì)對查詢結(jié)果中的每行都加排他鎖,當(dāng)沒有其他線程對查詢結(jié)果集中的任何一行使用排他鎖時(shí),可以成功申請排他鎖,否則會(huì)被阻塞。 行級(jí)鎖都是基于索引的,如果一條SQL語句用不到索引是不會(huì)使用行級(jí)鎖的,會(huì)使用表級(jí)鎖。行級(jí)鎖的缺點(diǎn)是:由于需要請求大量的鎖資源,所以速度慢,內(nèi)存消耗大。

總結(jié)

以上是生活随笔為你收集整理的Mysql 的表级锁和行级锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。