支援事務的資料庫必須有這四大特性,否則不能保證資料的正確性。
1)修改時允許修改:丟失更新;
兩個事務同時更新一行資料,但是第二個事務中途失敗退出,導致兩個資料修改都失效。2)修改時允許讀取:髒讀;
無效讀出,乙個事務讀取另乙個事務還木有提交的資料。例如:事務t1修改了一行資料,但還沒提交。這是事務t2讀取了被t1修改的資料,之後事務t1因為某種原因rollback了,那麼事務t2讀取的資料就是髒的。3)讀取時允許修改:不可重複讀;
兩次查詢返回不同的結果。事務t1讀取乙個資料,事務t2讀取並修改了這個資料,t1為了對讀取值進行檢驗而再次讀取該資料,便得到不同的結果。4)讀取時允許插入:幻讀;
事務操作中進行兩次查詢,第二次查詢結果包含了第一次查詢中未出現的資料或者缺少資料。如:系統管理員a將資料庫中所有學生成績從具體分值改為abcd等級,但是管理員b,這時插入了乙個分值資料,管理員a改結束後發現有個沒改過來,似乎出現了幻讀。
在這個隔離級別,所有事務可以看到其他未提交事務的執行結果。當操作同一行資料,讀事務允許其他讀事務和寫事務,未提交的寫事務禁止其他寫事務(但允許其他讀事務)。
可以防止更新丟失,但是不能防止髒讀、不可重複讀、幻讀。
通過排他寫鎖實現。
(除mysql)其他資料庫預設隔離級別,乙個事務只能看到已經提交事務所作的改變,支援不可重複讀。以操作同一行資料為前提,讀事務允許其他讀事務和寫事務,未提交的寫事務禁止其他讀事務和寫事務。
此隔離級別可以通過「瞬間共享讀鎖」和「排他寫鎖」實現。
mysql預設事務隔離級別,確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。但是會導致幻讀。innodb和falcon儲存引擎通過多版本併發控制機制,解決該問題;
以操作同一行資料為前提,讀事務禁止其他寫事務(但允許其他讀事務),未提交的寫事務禁止其他讀事務和寫事務。
此隔離級別可以防止更新丟失、髒讀、不可重複讀,但不能防止幻讀。
此隔離級別可以通過「共享讀鎖」和「排他寫鎖」實現。
強制事務排序,每個讀的資料行加上共享鎖。可能導致大量的超時現象和鎖競爭。提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,不能併發執行。
此隔離級別可以防止更新丟失、髒讀、不可重複讀、幻讀。
如果僅僅通過「行級鎖」是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。
資料庫事務特性和隔離級別
一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...
資料庫事務特性和隔離級別
資料庫事務是資料庫管理系統執行過程中的乙個邏輯單位,有乙個有限的資料庫操作序列完成。以 a賬戶向b賬戶匯錢 為例,乙個事務是下面乙個操作序列 a.從a賬號中把餘額讀出來。b.對a賬號做減法操作。c.把結果寫回a賬號中。d.從b賬號中把餘額讀出來。e.對b賬號做加法操作。f.把結果寫回b賬號中。事務有...
資料庫事務特性和隔離級別
一組業務操作,要麼全部成功,要麼全部不成功。原子性 乙個事務是乙個整體,不可分割,事務中的操作要麼都成功,要麼都失敗。一致性 事務必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。事務執行前後,資料庫的狀態是一致的。例如 a有1000,元,b有1000元,加起來是2000,中間執行轉賬的操作,轉賬...