亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

鎖:計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問某一資源的機(jī)制。

在數(shù)據(jù)庫中,除傳統(tǒng)的計(jì)算資源(如CPU、RAM、I/O等)的爭(zhēng)用外,數(shù)據(jù)也是一種供許多用戶共享的資源。如何保證數(shù)據(jù)并發(fā)的一致性、有效性是所有數(shù)據(jù)庫必須解決的一個(gè)問題,鎖沖突也是影響數(shù)據(jù)庫并發(fā)訪問性能的一個(gè)重要因素。從這個(gè)角度來說,鎖對(duì)數(shù)據(jù)庫而言顯得尤為重要,也更復(fù)雜。

鎖的分類

1)從對(duì)數(shù)據(jù)操作的類型分為讀鎖和寫鎖

2)從對(duì)數(shù)據(jù)操作的粒度分主要有表鎖和行鎖

讀鎖和寫鎖:

讀鎖(共享鎖):針對(duì)同一份數(shù)據(jù),多個(gè)讀操作可以同時(shí)進(jìn)行而不會(huì)互相影響。

寫鎖(排他鎖):當(dāng)前寫操作沒有完成前,它會(huì)阻斷其他讀和寫操作。

表鎖

先看一些命令

我們可以手動(dòng)對(duì)一張表加鎖,可以是讀鎖或者寫鎖,命令:

lock table 表名 read/write,表名 read/write,……

查看表有沒有鎖的命令

show open tables;
MySQL數(shù)據(jù)庫鎖理論

 

In_use的值是0代表沒鎖,是1代表有鎖。

現(xiàn)在數(shù)據(jù)庫中有一張表,test_lock,現(xiàn)在手動(dòng)給它加鎖,進(jìn)行一些操作測(cè)試。

一、加讀鎖

lock table test_lock read;
MySQL數(shù)據(jù)庫鎖理論

 

加鎖成功,可以用show open tables命令查看

MySQL數(shù)據(jù)庫鎖理論

 

現(xiàn)在可以做一些操作。

1、讀被鎖的表:

select * from test_lock;

在當(dāng)前連接中:

MySQL數(shù)據(jù)庫鎖理論

 

可以查詢到結(jié)果。

在新連接中:

MySQL數(shù)據(jù)庫鎖理論

 

新的連接同樣可以查詢被鎖的表。

2、查詢庫中其他表:

select * from test2;

在當(dāng)前連接中:

MySQL數(shù)據(jù)庫鎖理論

 

結(jié)果報(bào)錯(cuò),無法查詢。

在新連接中:

MySQL數(shù)據(jù)庫鎖理論

 

正常,沒有影響。

3、更新被鎖的表:

update test_lock set name = 'abcd' where id = '1';

在當(dāng)前連接中:

MySQL數(shù)據(jù)庫鎖理論

 

無法更新。

在新連接中:

執(zhí)行此語句后,會(huì)發(fā)現(xiàn)一直在等待,即阻塞了,直到我們把表的鎖釋放。

釋放鎖命令:unlock table;

執(zhí)行釋放命令后,新連接中的update語句也馬上有了反應(yīng),

MySQL數(shù)據(jù)庫鎖理論

 

執(zhí)行等待了1分多鐘。

4、更新庫中其他表:

update test2 set name = 'a2' where id = '1';

在當(dāng)前連接中:

MySQL數(shù)據(jù)庫鎖理論

 

無法更新

在新連接中:

MySQL數(shù)據(jù)庫鎖理論

 

在新的會(huì)話中,更新其他表是沒有影響的。

二、加寫鎖

lock table test_lock write;
MySQL數(shù)據(jù)庫鎖理論

 

同樣,我們?cè)诋?dāng)前會(huì)話和和新會(huì)話中做一些操作對(duì)比。

1、讀被鎖的表:

select * from test_lock;

當(dāng)前會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

讀沒有影響。

新的會(huì)話中:

此時(shí)會(huì)被阻塞,需要等待釋放鎖。

MySQL數(shù)據(jù)庫鎖理論

 

2、查詢庫中其他表:

select * from test2;

當(dāng)前會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

其他表不能查詢。

新的會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

此時(shí)不受影響。

3、更新被鎖的表:

update test_lock set name = 'abcd' where id = '2';

當(dāng)前會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

可以更新。

新的會(huì)話中:

結(jié)果是被阻塞。

4、更新庫中其他表

update test2 set name = 'a2' where id = '2';

當(dāng)前會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

 

此時(shí)不可以更新其他表。

新的會(huì)話中:

MySQL數(shù)據(jù)庫鎖理論

 

更新其他表時(shí)候沒有問題。

以上是對(duì)表分別加讀鎖和寫鎖,然后進(jìn)行的一些操作對(duì)比,重要的關(guān)注在其他會(huì)話中對(duì)被鎖表的讀寫請(qǐng)求。

對(duì)表加讀鎖,不會(huì)阻塞其他進(jìn)行對(duì)同一表的讀請(qǐng)求,但會(huì)阻塞對(duì)同一表的寫請(qǐng)求。只有當(dāng)讀鎖釋放后,才會(huì)執(zhí)行其他執(zhí)行進(jìn)行的寫操作。

對(duì)表加寫鎖,會(huì)阻塞其他進(jìn)程對(duì)同一表的讀和寫的請(qǐng)求,只有當(dāng)寫鎖釋放后,才會(huì)執(zhí)行其它進(jìn)程的讀寫操作。

分享到:
標(biāo)簽:理論 MySQL
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定