數據庫事務的特徵 數據庫事務特徵ACID。數據庫
- A Atomicity 原子性 事務是一個原子性質的操做單元,事務裏面的對數據庫的操做要麼都執行,要麼都不執行,
- C Consistent 一致性 在事務開始以前和完成以後,數據都必須保持一致狀態,必須保證數據庫的完整性。也就是說,數據必須符合數據庫的規則。
- I Isolation 隔離性 數據庫容許多個併發事務同事對數據進行操做,隔離性保證各個事務相互獨立,事務處理時的中間狀態對其它事務是不可見的,以此防止出現數據不一致狀態。可經過事務隔離級別設置:包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)
- D Durable 持久性 一個事務處理結束後,其對數據庫的修改就是永久性的,即便系統故障也不會丟失。
髒讀、幻讀、不可重複讀併發
髒讀:一個事務還未提交,另一個事務訪問此事務修改的數據,並使用,讀取了事務中間狀態數據。 幻讀:一個事務讀取2次,獲得的記錄條數不一致,因爲2次讀取之間另一個事務對數據進行了增刪。 不可重複讀:一個事務讀取同一條記錄2次,獲得的結果不一致,因爲在2次讀取之間另一個事務對此行數據進行了修改。性能
設置不一樣的事務隔離級別:事務
- 未受權讀取 也稱爲讀未提交(Read Uncommitted):容許髒讀取,但不容許更新丟失。若是一個事務已經開始寫數據,則另一個事務則不容許同時進行寫操做,但容許其餘事務讀此行數據。該隔離級別能夠經過「排他寫鎖」實現。
- 受權讀取 也稱爲讀提交(Read Committed):容許不可重複讀取,但不容許髒讀取。這能夠經過「瞬間共享讀鎖」和「排他寫鎖」實現。讀取數據的事務容許其餘事務繼續訪問該行數據,可是未提交的寫事務將會禁止其餘事務訪問該行。
- 可重複讀取(Repeatable Read) 可重複讀取(Repeatable Read):禁止不可重複讀取和髒讀取,可是有時可能出現幻讀數據。這能夠經過「共享讀鎖」和「排他寫鎖」實現。讀取數據的事務將會禁止寫事務(但容許讀事務),寫事務則禁止任何其餘事務。
- 序列化(Serializable) 序列化(Serializable):提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接着一個地執行,不能併發執行。僅僅經過「行級鎖」是沒法實現事務序列化的,必須經過其餘機制保證新插入的數據不會被剛執行查詢操做的事務訪問到。 隔離級別越高,越能保證數據的完整性和一致性,可是對併發性能的影響也越大。對於多數應用程序,能夠優先考慮把數據庫系統的隔離級別設爲Read Committed。它可以避免髒讀取,並且具備較好的併發性能。儘管它會致使不可重複讀、幻讀和第二類丟失更新這些併發問題,在可能出現這類問題的個別場合,能夠由應用程序採用悲觀鎖或樂觀鎖來控制。