mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明
mysql臟讀、不可重復(fù)讀、幻讀的區(qū)別
臟讀(Drity Read)
某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù),由于某些原因,
前一個(gè)RollBack了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會(huì)是不正確的。
例如:
- 一開始小明將數(shù)據(jù)A修改成了B,之后這個(gè)時(shí)候小紅讀取了B
- 但是由于小明將數(shù)據(jù)回滾了,修改成了A
- 那么在這個(gè)時(shí)間點(diǎn),小紅拿的數(shù)據(jù)就是錯(cuò)誤的了,正確的數(shù)據(jù)應(yīng)該為A
不可重復(fù)讀(Non-repeatable read)
在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù)。
例如:
- 小明一開始查詢數(shù)據(jù)時(shí)A,但是后面查詢的數(shù)據(jù)是B
- 因?yàn)橹型拘〖t將數(shù)據(jù)改成了B
- 這個(gè)時(shí)候就是兩次查詢數(shù)據(jù)不一致的問題
幻讀(Phantom Read)
- 在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致
- 例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù)
- 先前的事務(wù)在接下來的查詢中,就會(huì)發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的
例如:
- 一開始小明修改了全部數(shù)據(jù),5條數(shù)據(jù),然后小紅在過程中新增了2條數(shù)據(jù),然后小明再次查詢的時(shí)候
- 發(fā)現(xiàn)我不是已經(jīng)改了全部的數(shù)據(jù)5條了嗎,為什么又多出了兩條多余的數(shù)據(jù)
- 有點(diǎn)產(chǎn)生幻覺的意思,所以就是幻讀了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
大數(shù)據(jù)小內(nèi)存排序問題如何巧妙解決
文章介紹了大數(shù)據(jù)小內(nèi)存排序的三種方法:數(shù)據(jù)庫排序、分治法和位圖法,數(shù)據(jù)庫排序簡(jiǎn)單但速度慢,對(duì)設(shè)備要求高;分治法高效但實(shí)現(xiàn)復(fù)雜;位圖法可讀性差,但存儲(chǔ)空間受限2025-01-01
MySQL數(shù)據(jù)庫操作常用命令小結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)庫操作常用命令小結(jié),例如創(chuàng)建數(shù)據(jù)庫、使用數(shù)據(jù)庫、查看數(shù)據(jù)庫、數(shù)據(jù)庫編碼操作等命令講解,需要的朋友可以參考下2014-12-12
淺談Mysql中類似于nvl()函數(shù)的ifnull()函數(shù)
下面小編就為大家?guī)硪黄獪\談Mysql中類似于nvl()函數(shù)的ifnull()函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
mysql 5.7更改數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)位置的解決方法
MySQL的id關(guān)聯(lián)和索引使用的實(shí)際優(yōu)化案例
mysql where中如何判斷不為空的實(shí)現(xiàn)

