1. 程式人生 > >資料庫的隔離級別與併發問題

資料庫的隔離級別與併發問題

資料庫的隔離級別有四種  分別為:read uncommitted(讀未提交)、read committed(讀已提交)、repeatable read(重複讀)、serializable(序列化)。而多使用者同時訪問資料庫會產生的併發問題有:髒讀、不可重複讀和幻讀。很顯然,修改資料庫的隔離級別可以有防止相關的併發問題。

髒讀:意味著一個數據讀取了另外一個事務未提交的資料,而這個事務正好回滾了。顯然,read committed(讀已提交)可有效地防止此併發問題。

不可重複讀:意味著一個事務兩次查詢某一資料時得到兩個不同的結果,原因是在第一次查詢之後,另一事務將此資料修改了。repeatable read(重複讀)可防止此併發問題。

幻讀:例如一個事務修改了資料表中所有行,然後另一事務向這個表中插入一條資料,而第一個資料再次檢視的時候發現有一條資料沒有被修改,好像出現了幻覺。serizliable(序列化)可以防止此併發問題。事實上,序列化可以防止以上三種併發問題,但是此隔離級別的資料庫的效率就相當低了。

常用資料庫中MySQL的隔離級別為repeatable read,Oracle的隔離級別為read committed。