事務是由一組SQL語句組成的邏輯處理單元,事務具有以下4個屬性,通常簡稱為事務的ACID屬性。
ACID
Atomic(原子性)
Consistency(一致性)
Isolation(隔離性)
Durability(持久性)的英文縮寫。
Atomic(原子性):指整個數據庫事務是不可分割的工作單位。只有使據庫中所有的操作執行成功,才算整個事務成功;事務中任何一個SQL語句執行失敗,那么已經執行成功的SQL語句也必須撤銷,數據庫狀態應該退回到執行事務前的狀態。
Consistency(一致性):指數據庫事務不能破壞關系數據的完整性以及業務邏輯上的一致性。例如對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束后ACCOUNTS表中Tom和Jack的存款總額為2000元。
Isolation(隔離性):指的是在并發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。
隔離級別:
由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 四種。
Read uncommitted:讀取到未提交的數據,即產生臟讀現象。例如:發工資時,會計多打了3000,此時還未提交。你在查詢工資時,發現多了3000,然后會計發現了問題,回滾事務,重新提交。你再次查詢,發現工資正常。
Read committed:一個事務要等另一個事務提交后才能讀取數據,讀取正在被修改的數據,即產生不能重復讀現象。例如:發完工資,你查詢了工資卡有錢,然后在網上買個新款機械鍵盤,但是你家領導在這個時候將你的工資轉到了自己卡里面。你發現交易失敗,再次查詢,工資卡沒錢了?。ㄒ虼嗽谧x數據時,如果對數據有update操作,讀操作在update之后進行)
Repeatable read:在開始讀取數據(事務開啟)時,不再允許修改操作,但是會產生幻讀現象(針對讀時發生insert)例如:領導查賬,看你本月流水,查了一下200塊,心里覺得你還是很聽話的。這時候你買了機械鍵盤,然后領導打印消費清單,發現3200 ,這就是幻讀現象。
Serializable:序列化。最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀、不可重復讀與幻讀,但是此級別下數據庫效率低下,影響數據庫性能,一般不使用。
Durability(持久性):指的是只要事務成功結束,它對數據庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啟動數據庫系統后,數據庫還能恢復到事務成功結束時的狀態。
個人公號:【排骨肉段】,可以關注一下。