讀髒資料,不可重複讀,幻讀的思考

2021-09-26 16:40:40 字數 352 閱讀 7367

1前提:事務併發

2.髒讀:a讀取資料d,修改資料d,b讀取d,a回滾。

解決:a讀之前加乙個寫鎖,直到事務結束才釋放,各事務讀之前加讀鎖,防止被修改,對應資料庫隔離等級2(預設等級)

3.不可重複讀:因為讀鎖獲取後,並不會持續到事務結束才釋放,有可能中途有別的事務獲取寫鎖,從而導致事務2次讀取同乙個資料不一致。

解決方法:加了讀鎖,事務結束才結束,和髒讀一樣,鎖的是所讀取的資料。

4.幻讀:a讀取資料d,b插入資料d1,d1可被a用同樣的sql讀出,所以a第二次讀的時候還多出d1.。

解決方法:範圍鎖,其實就是鎖表,完全序列。

其實不可重複讀和幻讀在有些情況是可以接收的,看業務需求把

髒讀,不可重複讀,幻讀

髒讀,不可重複讀,幻讀是由於資料庫事務的隔離性導致的問題。髒讀 乙個事務讀取到了其它未提交事務操作的記錄。不可重複讀 乙個事務a內,首次查詢到一條相同記錄,然後事務b修改該條記錄並提交,事務a再次執行相同查詢,得到了事務b更新後的結果,事務a兩次相同的查詢,卻得到了不同的結果,這個叫做不可重複讀。是...

髒讀 不可重複讀 幻讀

髒讀 事務a使用了資料,但是還沒來得及提交,事務b就使用了這個資料,對於事務b來說就是髒讀。允許髒讀 sql server select from category with nolock 不可重複讀 事務a在9點和12點都會操作乙份資料,但是在10點的時候,事務b也操作了該份資料,並且使其數值進行...

髒讀 不可重複讀 幻讀

總結 對於不可重複讀和幻讀的區別是 不可重複讀圈了一塊地,這塊地不允許任何人動用,但是不管旁邊的地方是否開闢了一塊地。幻讀是不僅是圈的地,而且附近也不允許有新的地。這個對於區間查詢會有影響。所以不可重複讀和幻讀最大的區別是區間查詢的結果會不會一樣。幻讀保證結果一樣,但是不可重複讀不保證。mysql的...