解決併發事務造成的髒讀,幻讀,不可重複讀問題

2021-09-25 17:34:26 字數 559 閱讀 3514

未提交讀(read uncommitted):

在這個隔離級別下,其他事務可以看到本事務沒有提交的部分修改,因此會造成髒讀的問題(讀取到了其他事務未提交的部分,而之後該事物進行回滾)

這個級別的效能沒有足夠大的優勢,但是又有很多的問題,因此很少使用.

已提交讀(read committed):

其他事務只能讀取到本事務已提交的部分,這個隔離級別有不可重複讀的問題,在同乙個事務內的兩次讀取,拿到的結果竟然不一樣,因為另乙個事務對資料進行了更改.

可重複讀(repeatable read):

可重複讀隔離級別解決了上面不可重複讀的問題,但是仍然有乙個新問題就是幻讀,當你讀取id>10的資料行時,對涉及到的所有行加上了讀鎖,此時另外乙個事務新插入一條id=11的資料,因為是新插入的,所以不會觸發上面的鎖的排斥,那麼進行本事務下的一次查詢會發現有一條id=11的資料,而上次的查詢操作並沒有獲取到,再進行插入就會有主鍵衝突的問題

可序列化(serializable):

這是最高的隔離級別,可以解決上面提到的所有問題,因為他強制將所有的操作序列執行,這會導致併發效能急速下降,因此也不常用.

事務 隔離級別 髒讀 不可重複 幻讀

事務,就是一組運算元據庫的動作集合。如果一組 處理步驟 全部發生或者一步也不執行,我們稱該組處理步驟為乙個事務。當所有的步驟像乙個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。二 事務的併發問題 1 髒讀 事務 a讀取了...

事務 髒讀 不可重複讀 幻讀

建立db8資料庫 create database db8 使用db8資料庫 use db8 建立賬戶表 create table account id int primary keyauto increment 賬戶id name varchar 20 賬戶名稱 money double 賬戶餘額 ...

事務ACID原則,髒讀,不可重複,幻讀

要麼全部成功,要麼全部失敗 將一組sql語句放在乙個批次中去執行 針對同乙個事務,要麼都完成,要麼都不完成 結論 這兩個階段必須都成功,或都失敗,不能只完成乙個階段 針對事務操作前和操作後的狀態資料一致性 結論 最終的結果是一致性的表現 針對多個使用者同時操作,排除其他事務對本次事務的影響 結論 互...