資料庫事務隔離級別

2021-07-05 22:24:33 字數 1071 閱讀 3632

兩個事務同時修改了同一條資料,則後修改的被保留,先修改的將丟失。

乙個事物修改了資料但是沒有提交,這時第二個事務讀取了這個資料。然後第乙個事務回滾,導致讀取到了髒資料。

發生在乙個事務讀取兩次資料的情況。如,乙個事務先讀取了一條資料後,另乙個事務修改了這條資料,並提交了事務。那麼第乙個事務再次讀取這個資料,讀到了被修改的資料。

乙個事務先讀取記錄時,另乙個事務增加了記錄並且提交。事務一再次讀取時就會讀取到新增的記錄。

事務隔離級別描述:

read uncommitted:幻讀,不可重複讀和髒讀均允許;

read committed:允許幻讀和不可重複讀,但不允許髒讀;

repeatable read:允許幻讀,但不允許不可重複讀和髒讀;

serializable:幻讀,不可重複讀和髒讀都不允許;

oracle預設的是 read committed。

隔離級別越高,併發性越差

這裡還有一篇文章,講的更詳細,放在這裡

isolation_default: 使用底層資料庫預設的隔離層級

isolation_read_committed: 允許事務讀取其他並行的事務已經送出(commit)的資料字段,可以防止dirty read問題

isolation_read_uncommitted: 允許事務讀取其他並行的事務還沒送出的資料,會發生dirty、nonrepeatable、phantom read等問題

isolation_repeatable_read: 要求多次讀取的資料必須相同,除非事務本身更新資料,可防止dirty、nonrepeatable read問題

isolation_serializable: 完整的隔離層級,可防止dirty、nonrepeatable、phantom read等問題,會鎖定對應的資料**,因而有效率問題

具體知識請看這篇文章,進一步了解spring事務請看這篇文章。

悲觀鎖在資料被讀取時,啟動資料庫級別的鎖,使資料只能被訪問一次(主鍵和索引都會影響資料庫的訪問級別)。

樂觀鎖使用version或時間戳儲存乙個字段,當提交修改時,如果發現和讀取時的版本號不一樣,則提交不會成功。

資料庫事務隔離級別

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

資料庫事務隔離級別

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

資料庫事務隔離級別

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