1. 程式人生 > >面經總結:數據庫

面經總結:數據庫

cit 關系 表現 不同的 定時 atomic 用戶 錯誤 事務

  • 事務的四個特性?

四大特性是:ACID 原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)+介紹四個特性概念;

原子性:整個事務中的所有操作,要麽全部完成,要麽全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

一致性:在事務開始之前和事務結束以後,數據庫的完整性約束沒有被破壞

隔離性:當兩個或者多個事務並發訪問(此處訪問指查詢和修改的操作)數據庫的同一數據時所表現出的互相關系。事務隔離分為不同的級別,包括讀未提交(Read uncommitted)、讀提交(Read committed)、可重復讀(Repeatable read)和串行化(Serializable)。隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行 相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用於同一數據。

持久性:在事務完成以後,該事務對數據庫所作的更改便持久的保存在數據庫之中,並不會被回滾。

  • 事務的隔離級別

讀未提交(Read uncommitted)、讀已提交(Read committed)、可重復讀(Repeatable read)和串行化(Serializable)

  ① Serializable (串行化):可避免臟讀、不可重復讀、幻讀的發生。

  SERIALIZABLE可以防止除更新丟失外所有的一致性問題,即:

    1.語句無法讀取其它事務已修改但未提交的記錄。

    2.在當前事務完成之前,其它事務不能修改目前事務已讀取的記錄。

    3.在當前事務完成之前,其它事務所插入的新記錄,其索引鍵值不能在當前事務的任何語句所讀取的索引鍵範圍中。

  ② Repeatable read (可重復讀):可避免臟讀、不可重復讀的發生。

  REPEATABLE READ事務不會產生臟讀,並且在事務完成之前,任何其它事務都不能修改目前事務已讀取的記錄。其它事務仍可以插入新記錄,但必須符合當前事務的搜索條件——這意味著當前事務重新查詢記錄時,會產生幻讀(Phantom Read)。

  ③ Read committed (讀已提交):可避免臟讀的發生。

    語句無法讀取其它事務已修改但未提交的記錄。

  ④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。

  • 四大沖突問題

1、臟讀

某個事務讀取的數據是另一個事務正在處理的數據。而另一個事務可能會回滾,造成第一個事務讀取的數據是錯誤的。

2、不可重復讀

在一個事務裏兩次讀入數據,但另一個事務已經更改了第一個事務涉及到的數據,造成第一個事務讀入舊數據。

3、幻讀

幻讀是指當事務不是獨立執行時發生的一種現象。例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麽,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。

4、更新丟失

多個事務同時讀取某一數據,一個事務成功處理好了數據,被另一個事務寫回原值,造成第一個事務更新丟失。

面經總結:數據庫