事務
事務是什么?
事務是一種機制,一個操作序列,包含了一組數據庫操作命令,并且把所有命令作為一個整體一起向系統提交或者撤銷操作請求,即統一這組命令要么一起執行,要么一起不執行
簡短概況就是:事務即是一組命令序列,他們要么一起執行;要么一起不執行;從而保證了數據的完整性和統一性。
事務的特性
acid特性:原子性,一致性,隔離性,持久性
原子性atomicity
事務是一個不可分割的整體,事務中的所有操作要么一起執行,要么一起不執行。而事務中只要有一個操作不成功,那么整個事務都將會被回滾。 ? 案例:a向b轉賬1000元,當只執行了扣款語句時斷電了,a賬號發生了扣款,b賬號卻沒有收到打款。此時事務的原子性就會來保證事務要么都執行,要么都不執行了。 ?
一致性cinsustency
事務開始前和事務執行結束后,數據庫的完整性約束沒有被破壞。
即事務開始前,數據庫的數據處于一致狀態;事務完成時,數據也必須處于一致狀態。當事務運行時,數據可能會處于不一致的狀態,但當事務完成時,數據必須回到一致狀態。
案例:
對銀行轉賬事務,不管事務成功與否,都應該再事務結束后保持前后二者存款總額與事務執行前一致
當多個用戶對同一個表進行操作時,可能會出現以下一致性問題:
1臟讀
a修改了這條數據但未提交后,此時b卻可以看到a這條未提交的修改記錄。--臟讀
2不可重復讀
a在一個事務c內,反復讀取同一個數據時。在這個事務還沒有結束時,b在另一個事務d中也訪問了這個數據。那么,再第一個事務c中讀到數次的數據,可能由于第二個事務d的修改,導致第一個事務c讀到的數據前后不一致。--不可重復讀
3幻讀
一個事務對表中的所有數據進行了修改;同時,另一個事務向這個表添加了數據,操作第一個事務的用戶會發現:表中還有一行數據沒有被修改,像中了幻覺一樣。--幻讀
4丟失更新
兩個事務同時讀取同一條記錄,a先修改記錄,b也修改記錄;當b提交后,那么a修改的結果會被b修改的結果覆蓋。--丟失更新
隔離性
隔離性確保并發執行事務的狀態保存與順序執行事務時的狀態相同
持久性
事務完成后,該事務對數據庫所做的更改會持久的保存在數據庫中,并且不會被回滾;
即不夠系統是否發生故障,事務處理的結果都是永久的。一旦事務被提交,那么事務的效果將會永久的保存在數據庫中。
總結
事務管理中,原子性是基礎,隔離性是手段,一致性是目的,持久性是結果。