區別:不可重複讀取的重點是修改;同樣的條件,第1次和第2次讀取的值不一樣。幻讀的重點在於新增或刪除;同樣的條件, 第1次和第2次讀取的記錄數不一樣。從控制角度來看,不可重複讀取只需要鎖住符合條件的記錄,幻讀要鎖住滿足條件及其相近的記錄。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
精煉解釋:
無法重複讀取的重點是修改:
##同樣的條件, 你讀取過的資料, 再次讀取出來發現值不一樣了幻讀的重點在於新增或刪除##同樣的條件, 第1次和第2次讀出來的記錄數不一樣
當然, 從總的結果來看, 似乎兩者都表現為兩次讀取的結果不一致.
但如果你從控制的角度來看, 兩者的差異就比較大
1) "不可重複讀" 是指在一個事務內,多次讀取相同資料。在這個事務還沒結束時,另外一個事務也存取該相同資料。那麼,在第一個事務中的兩次讀取資料之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的資料可能是不一樣的。這樣就發生了在一個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文檔,則可以避免該問題
要避免這種情況,通常可以用 set tran isolation level repeatable read 來設定隔離級別,這樣事務A在兩次讀取表T中的資料時,事務B如果企圖更改表T中的資料(細節到事務A讀取資料)時,就會被阻塞,知道事務A提交! 這樣就保證了,事務A兩次讀取的資料的一致性。 2)幻覺讀取是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好像發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合併到該文檔的主副本時,發現作者已將未編輯的新資料新增至該文檔。如果在編輯人員和生產部門完成原始文件的處理之前,任何人都無法將新資料新增至文件中,則可以避免該問題。相關免費學習推薦:
mysql影片教學#
以上是不可重複讀和幻讀的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!