關於資料庫隔離問題說明及解決

2022-09-13 12:51:11 字數 991 閱讀 6655

資料庫事務需要隔離級別,原因在於在操作過程中可能會出現以下問題:

1.髒讀:髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。 

ps:另乙個事務讀取了未提交的資料的情況。

解決方法:設定隔離級別為:read committed(可防止髒讀,不可防止重複讀,幻讀。)

2.不可重複讀:是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個事務中的兩次讀資料之間,由於第二個事務的修改,那麼第乙個事務兩次讀到的的資料可能是不一樣的。這樣就發生了在乙個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。例如,乙個編輯人員兩次讀取同一文件,但在兩次讀取之間,作者重寫了該文件。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文件,則可以避免該問題。 

ps:在同一事務中讀取到不用資料的情況。

解決方法:設定隔離級別:repeatable read (可防止髒讀,不可重複讀,不可防止幻讀。mysql預設的隔離級別。)

3.幻讀: 是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。例如,乙個編輯人員更改作者提交的文件,但當生產部門將其更改內容合併到該文件的主複本時,發現作者已將未編輯的新材料新增到該文件中。如果在編輯人員和生產部門完成對原始文件的處理之前,任何人都不能將新材料新增到文件中,則可以避免該問題。 

ps:另一事務修改了表的某整個行或列,讀取到的資料不同的情況。偶爾出現,沒有規律,但是需要注意。

解決辦法:設定隔離級別:serializable(讓資料庫序列化執行,可防止上述所有問題,但是效能會下降。)

關於資料庫隔離級別

一 資料庫事務隔離級別 資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable 這四個級別可以逐個解決髒讀 不可重複讀 幻讀 這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read un...

關於資料庫的隔離級別

一般來說,資料庫有四種隔離級別如下 1.read uncommitted 讀未提交資料 允許事務讀取未被其他事務提交的變更。此種隔離級別下,髒讀 不可重複讀和幻度都可能出現 2.read committed 讀已提交資料 只允許事務讀取已經被其他事務提交的變更。但不可重複讀和幻讀的問題仍然會出現 3...

資料庫事務及隔離級別

1資料庫四大特性 資料庫具有事務安全性,同時也具有acid四大特性 原子性 一致性 隔離性 永續性 原子性 atomicity 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能...