W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
鎖主要是為了保持?jǐn)?shù)據(jù)庫(kù)數(shù)據(jù)的一致性,可以阻止用戶修改一行或整個(gè)表,一般用在并發(fā)高層的數(shù)據(jù)庫(kù)中。
在多個(gè)用戶訪問數(shù)據(jù)庫(kù)的時(shí)候若對(duì)并發(fā)操作不加控制就可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性。
數(shù)據(jù)庫(kù)中有兩種基本的鎖:排它鎖(Exclusive Locks)和共享鎖(Share Locks)。
如果數(shù)據(jù)對(duì)象加上排它鎖,則其他的事務(wù)不能對(duì)它讀取和修改。
如果加上共享鎖,則該數(shù)據(jù)庫(kù)對(duì)象可以被其他事務(wù)讀取,但不能修改。
LOCK命令基礎(chǔ)語(yǔ)法如下:
LOCK [ TABLE ] name IN lock_mode
一旦獲得了鎖,鎖將在當(dāng)前事務(wù)的其余時(shí)間保持。沒有解鎖表命令;鎖總是在事務(wù)結(jié)束時(shí)釋放。
當(dāng)兩個(gè)事務(wù)彼此等待對(duì)方完成其操作時(shí),可能會(huì)發(fā)生死鎖。盡管PostgreSQL可以檢測(cè)它們并以回滾結(jié)束它們,但死鎖仍然很不方便。為了防止應(yīng)用程序遇到這個(gè)問題,請(qǐng)確保將應(yīng)用程序設(shè)計(jì)為以相同的順序鎖定對(duì)象。
這些被稱為咨詢鎖。由于系統(tǒng)不強(qiáng)制使用它們,因此正確使用它們本身的應(yīng)用程序。咨詢鎖對(duì)于不適合MVCC模型的鎖定策略非常有用。
例如,咨詢鎖的一個(gè)常見用途是模擬所謂的“平面文件”數(shù)據(jù)管理系統(tǒng)中典型的悲觀鎖定策略。雖然存儲(chǔ)在表中的標(biāo)志可以使用相同的目的,但是通知鎖取消,避免了表膨脹,并且在會(huì)話結(jié)束時(shí)由服務(wù)器自動(dòng)清理。
創(chuàng)建COMPANY表,數(shù)據(jù)內(nèi)容如下:
w3cschooldb## select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
下面的示例將w3cschooldb數(shù)據(jù)庫(kù)中的 COMPANY 表鎖定為 ACCESS EXCLUSIVE 模式。
LOCK 語(yǔ)句只在事務(wù)模式下工作。
w3cschooldb=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;
上面操作將得到下面結(jié)果:
LOCK TABLE
上面的消息指示表被鎖定,直到事務(wù)結(jié)束,并且要完成事務(wù),您必須回滾或提交事務(wù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: