鍍金池/ 問答/數(shù)據(jù)庫(kù)/ 不同的隔離級(jí)別的事務(wù)之間的關(guān)系是如何的?

不同的隔離級(jí)別的事務(wù)之間的關(guān)系是如何的?

譬如一個(gè)事務(wù)A的隔離級(jí)別是repeatable read
我的理解是A事務(wù)的一條讀的sql語(yǔ)句重復(fù)多次結(jié)果一樣,
不管是否有其他事務(wù)對(duì)sql影響的數(shù)據(jù)行/表有沒有更改

而若一個(gè)事務(wù)A的隔離級(jí)別是read committed
則是A事務(wù)影響的行/表要在這個(gè)事務(wù)提交之后才能被別的事務(wù)看到

那么這兩個(gè)隔離級(jí)別,一個(gè)是別人操作對(duì)自己讀的影響隔離
一個(gè)是自己操作對(duì)別人讀的影響隔離
感覺不太一致啊
因?yàn)槲矣X得要么都是別人操作對(duì)自己讀的影響隔離
要么都是自己操作對(duì)別人讀的影響隔離

如何理解?

而serializable就更不好理解了
一個(gè)事務(wù)如果是serializable,這意思是這個(gè)事務(wù)執(zhí)行期間是獨(dú)占其被影響的數(shù)據(jù)表/行,其他任何隔離級(jí)別的事務(wù)中的操作都無法進(jìn)行嗎?還是要兩個(gè)事務(wù)都是serializable隔離級(jí)別才會(huì)影響彼此?

回答
編輯回答
笑浮塵

????事務(wù)隔離等級(jí):

  • 未提交讀(READ UNCOMMITED) :兩個(gè)事務(wù)之間互相可見,即使另一個(gè)事務(wù)沒有提交也可以獲取數(shù)據(jù)(不推薦),這就是所謂的臟讀;
  • 已提交讀(READ COMMITED):符合隔離性的基本概念,一個(gè)事務(wù)進(jìn)行時(shí),其它已提交的事物對(duì)于該事務(wù)是可見的,即可以獲取其它事務(wù)提交的數(shù)據(jù)。
  • 可重復(fù)讀(REPEATABLE READ) :InnoDB的默認(rèn)隔離等級(jí)。事務(wù)進(jìn)行時(shí),其它所有事務(wù)對(duì)其不可見,即多次執(zhí)行讀,得到的結(jié)果是一樣的!
  • 可串行化SERIALIZABLE): 在讀取的每一行數(shù)據(jù)上都加鎖,會(huì)造成大量的鎖超時(shí)和鎖征用,嚴(yán)格數(shù)據(jù)一致性且沒有并發(fā)是可使用。

clipboard.png

????查看系統(tǒng)的事務(wù)隔離級(jí)別:show variables like '%iso%';
????開啟一個(gè)新事務(wù):begin;
????提交一個(gè)事務(wù):commit;
????修改事物的隔離級(jí)別:set session tx_isolation='read-committed';

2018年3月2日 06:17
編輯回答
來守候

事務(wù)隔離級(jí)別影響的是事務(wù)內(nèi)部,管理好自己的鎖就可以了,跟其他事務(wù)沒有關(guān)系,并沒有什么沖突
讀是不加鎖的,rc就是可能讀的數(shù)據(jù)會(huì)有變化,rr讀的是快照數(shù)據(jù)不會(huì)變化,串行就串行事務(wù)之間排隊(duì)而已
寫的情況就是各加各的鎖,不管什么隔離級(jí)別,有鎖就不能更新,沒鎖就加上鎖,互相之間有什么影響?

2018年2月3日 15:40
編輯回答
小曖昧

同一個(gè)數(shù)據(jù)庫(kù)還能是不同的隔離級(jí)別?

2018年8月26日 20:13