最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 16:22:14
文檔

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖:數(shù)據(jù)庫事物樂觀鎖和悲觀鎖 數(shù)據(jù)庫事物單個(gè)邏輯單元工作執(zhí)行的一系列操作,就是一些sql語句,也可以是多條,一個(gè)update操作就是一個(gè)事物。 事物具有四種特性 1.原子性 事物必須是原子工作單元,要么都執(zhí)行成功(也就是說所有的sql語句都執(zhí)行成功),要么都不
推薦度:
導(dǎo)讀數(shù)據(jù)庫事物樂觀鎖和悲觀鎖:數(shù)據(jù)庫事物樂觀鎖和悲觀鎖 數(shù)據(jù)庫事物單個(gè)邏輯單元工作執(zhí)行的一系列操作,就是一些sql語句,也可以是多條,一個(gè)update操作就是一個(gè)事物。 事物具有四種特性 1.原子性 事物必須是原子工作單元,要么都執(zhí)行成功(也就是說所有的sql語句都執(zhí)行成功),要么都不

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖 數(shù)據(jù)庫事物單個(gè)邏輯單元工作執(zhí)行的一系列操作,就是一些sql語句,也可以是多條,一個(gè)update操作就是一個(gè)事物。 事物具有四種特性 1.原子性 事物必須是原子工作單元,要么都執(zhí)行成功(也就是說所有的sql語句都執(zhí)行成功),要么都不


數(shù)據(jù)庫事物樂觀鎖和悲觀鎖

數(shù)據(jù)庫事物單個(gè)邏輯單元工作執(zhí)行的一系列操作,就是一些sql語句,也可以是多條,一個(gè)update操作就是一個(gè)事物。

事物具有四種特性

1.原子性

事物必須是原子工作單元,要么都執(zhí)行成功(也就是說所有的sql語句都執(zhí)行成功),要么都不執(zhí)行(所有的sql語句都不執(zhí)行)。

www.2cto.com

2. 一致性

事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。

3.隔離性

允許多個(gè)用戶對(duì)數(shù)據(jù)進(jìn)行并發(fā)訪問,而不破環(huán)數(shù)據(jù)的完整行和正確性,同時(shí),并發(fā)事物的修改必須與其他并發(fā)事物隔離,一般是通過加鎖實(shí)現(xiàn)。

4.持久性

事物完成后,數(shù)據(jù)必須永久的保存到數(shù)據(jù)庫中。

事物并發(fā)訪問如果不設(shè)置事物的隔離級(jí)別,就會(huì)帶來如下問題

1.臟讀 讀取了其他事物未提交的數(shù)據(jù),一個(gè)事物修改了某條數(shù)據(jù)還未提交,一個(gè)事物讀取了這條數(shù)據(jù),而修改的事物由于某種原因失敗會(huì)滾了,這個(gè)時(shí)候讀取事物就讀到了臟數(shù)據(jù)。

2.不可重復(fù)讀

一個(gè)事物兩次讀取某條數(shù)據(jù),但讀取的結(jié)果不一樣,在第二次讀取的時(shí)候其他實(shí)物修改了這條數(shù)據(jù)。

www.2cto.com

3.幻讀

一個(gè)事物兩次讀取,讀取到了其他事物插入到數(shù)據(jù)中的數(shù)據(jù)。

針對(duì)以上情況,數(shù)據(jù)庫提供了四種事物的隔離級(jí)別來解決事物并發(fā)帶來的問題。

1.讀未提交(read uncommited)

寫事物會(huì)阻塞寫事物,但不會(huì)阻塞讀取事物,因此不能解決讀取臟數(shù)據(jù),讀取事物不會(huì)阻塞其他事物,這中隔離級(jí)別不能解決上面任何問題。

2 讀已經(jīng)提交(read commited)

寫事物會(huì)阻塞寫事物和讀取事物,因此可以避免讀取臟數(shù)據(jù),但讀取事物不會(huì)阻塞寫事物,不能解決可重復(fù)度去的問題。

3 可重復(fù)讀(Repeatable read)

讀事物會(huì)阻塞寫事物和讀事物,因此可以重復(fù)讀,但其他事物可以進(jìn)行插入操作,不能解決幻讀的問題。

4 序列化(Serializable)

事物必須一個(gè)一個(gè)的執(zhí)行 ,可以解決上面的問題,但事物基本沒有并發(fā)性。

事物的并發(fā)控制

當(dāng)多個(gè)人并發(fā)修改同一條數(shù)據(jù)時(shí),必須實(shí)現(xiàn)一個(gè)控制系統(tǒng),使一個(gè)人的修改不會(huì)對(duì)其他人的修改造成負(fù)面影響。

樂觀鎖和悲觀鎖控制并發(fā)

1.樂觀鎖

樂觀的認(rèn)為其他用戶企圖訪問和更改你正在訪問的對(duì)象的概率很低,即使有,大不了從來一次,對(duì)在做一次的開銷不是很大的情況下,如果開銷很大則必須使用悲觀鎖.樂觀鎖的實(shí)現(xiàn)需要在程序中控制,可以通過加一個(gè)數(shù)據(jù)版本號(hào)來控制比如兩個(gè)事物都讀取了同一條記錄要進(jìn)行更新

Sql代碼

select * from person

select * from person

update person set name='xiaoming',version=version+1 where id='1'

and version=0;

這個(gè)更新語句會(huì)執(zhí)行失敗,因?yàn)檎也坏桨姹竞脼?的數(shù)據(jù),第一個(gè)事物已經(jīng)更新了

pdate person set name='xiaoming',version=version+1 where id='1'

and version=0;

www.2cto.com

如果實(shí)物的隔離級(jí)別設(shè)置為讀已提交,使用樂觀鎖并能解決可重復(fù)度,系統(tǒng)要允許不可重復(fù)讀取。

悲觀鎖

很悲觀的認(rèn)為其他用戶訪問和更改你正在訪問或修改的對(duì)象的概率和高,悲觀鎖的實(shí)現(xiàn)是通過加鎖來實(shí)現(xiàn)的,當(dāng)要更改數(shù)據(jù)前就加鎖,別的事物不能操作,sql語句如下

Sql代碼

select * from person for update

update person set name='ff' where id='1'

直到上面事物提交,才能釋放鎖,其他事物才能操作。悲觀鎖的并發(fā)性會(huì)降低。因此大多數(shù)情況下,使用樂觀鎖來實(shí)現(xiàn)并發(fā)修改。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖

數(shù)據(jù)庫事物樂觀鎖和悲觀鎖:數(shù)據(jù)庫事物樂觀鎖和悲觀鎖 數(shù)據(jù)庫事物單個(gè)邏輯單元工作執(zhí)行的一系列操作,就是一些sql語句,也可以是多條,一個(gè)update操作就是一個(gè)事物。 事物具有四種特性 1.原子性 事物必須是原子工作單元,要么都執(zhí)行成功(也就是說所有的sql語句都執(zhí)行成功),要么都不
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top