1. 程式人生 > >資料庫事務、特性及隔離級別

資料庫事務、特性及隔離級別

一、事務

     事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。而這些邏輯工作單元需要具有原子性,  一致性,隔離性和永續性四個屬性,統稱為ACID特性。

二、事務的4個基本特徵

    ●  原子性(Atomic):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。

  ●  一致性(Consistency):只有合法的資料可以被寫入資料庫,否則事務應該將其回滾到最初狀態。

  ●  隔離性 (Isolation):事務允許多個使用者對同一個資料進行併發訪問,而不破壞資料的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。

  ●  永續性(Durability):事務結束後,事務處理的結果必須能夠得到固化。

三、事務的隔離級別

  資料庫事務的隔離級別有4種,由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。

  Read uncommitted

      讀未提交,顧名思義,就是一個事務可以讀取另一個未提交事務的資料,出現髒讀;

  Read committed

    讀提交,顧名思義,就是一個事務要等另一個事務提交後才能讀取資料。

    若有事務對資料進行更新(UPDATE)操作時,讀操作事務要等待這個更新操作事務提交後才能讀取資料,可以解決髒讀問題。但在這個事例中,出現了一個事務範圍內兩個相同的查詢卻返回了不同資料,這就是不可重複讀

  Repeatable read

    重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作。

    重複讀可以解決不可重複讀問題。寫到這裡,應該明白的一點就是,不可重複讀對應的是修改,即UPDATE操作。但是可能還會有幻讀問題。因為幻讀問題對應的是插入INSERT操作,而不是UPDATE操作

  Serializable 序列化

    是最高的事務隔離級別,在該級別下,事務序列化順序執行

,可以避免髒讀、不可重複讀與幻讀。