一個事務(transaction)中的全部操做,或者所有完成,或者所有不完成,不會結束在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。即,事務不可分割、不可約簡。mysql
數據庫容許多個併發事務同時對其數據進行讀寫和修改的能力,隔離性能夠防止多個事務併發執行時因爲交叉執行而致使數據的不一致。事務隔離分爲不一樣級別,包括讀未提交(Read uncommitted)、讀已提交(read committed)、可重複讀(repeatable read)和串行化/序列化(Serializable)。sql
在事務開始以前和事務結束之後,數據庫的完整性沒有被破壞。這表示寫入的資料必須徹底符合全部的預設約束、觸發器、級聯回滾等。數據庫
事務處理結束後,對數據的修改就是永久的,即使系統故障也不會丟失。併發
一個事務讀到了另外一個事務未提交的數據(回滾)ui
是不可重複讀的一種特殊場景:當事務1兩次執行SELECT ... WHERE檢索必定範圍內數據的操做中間,事務2在這個表中建立了(如INSERT)了一行新數據,這條新數據正好知足事務1的「WHERE」子句。事務
給人的感受就像出現了幻覺同樣,以前明明不存在的數據,如今忽然出現了,被稱爲「幻讀」。資源
第一個事務兩次「讀取」過程當中,另外一個事務對一樣的數據進行更新,第一個事務兩次讀取結果不一致,因此被稱爲「不可重複讀」。it
PS:io