MysqlSql事務特性

2021-10-24 08:05:55 字數 1453 閱讀 4235

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,操作如果成功就必須要完全應用到資料庫,操作失敗則不能對資料庫有任何影響。

一致性是指事務使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

以轉賬為例假設a和b的各有100元,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來還是200,這就是事務的一致性。

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到一種每個事務都互不影響,不能感對方的併發地執行。

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

資料庫事務無非就兩種:讀取事務(select)、修改事務(update,insert)。在沒有事務隔離控制的時候,多個事務在同一時刻對同一資料的操作可能就會影響到最終期望的結果,通常有四種情況

a) 修改時允許修改(丟失更新)

b) 修改時允許讀取(髒讀)

c) 讀取時允許修改(不可重複讀)

d) 讀取時允許插入(幻讀)

第一種隔離級別:read uncommitted(讀未提交)

如果乙個事務已經開始寫資料,則另外乙個事務不允許同時進行寫操作,但允許其他事務讀此行資料,該隔離級別可以通過「排他寫鎖」,但是不排斥讀執行緒實現。這樣就避免了更新丟失,卻可能出現髒讀,也就是說事務b讀取到了事務a未提交的資料

第二種隔離級別:read committed(讀提交)

如果是乙個讀事務(執行緒),則允許其他事務讀寫,如果是寫事務將會禁止其他事務訪問該行資料,該隔離級別避免了髒讀,但是可能出現不可重複讀。事務a事先讀取了資料,事務b緊接著更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已經發生了改變。

解決了更新丟失和髒讀問題

第三種隔離級別:repeatable read(可重複讀取)

可重複讀取是指在乙個事務內,多次讀同乙個資料,在這個事務還沒結束時,其他事務不能訪問該資料(包括了讀寫),這樣就可以在同乙個事務內兩次讀到的資料是一樣的,因此稱為是可重複讀隔離級別,讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務(包括了讀寫),這樣避免了不可重複讀和髒讀,但是有時可能會出現幻讀。(讀取資料的事務)可以通過「共享讀鏡」和「排他寫鎖」實現。

第四種隔離級別:serializable(可序化)

提供嚴格的事務隔離,它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行,如果僅僅通過「行級鎖」是無法實現序列化的,必須通過其他機制保證新插入的資料不會被執行查詢操作的事務訪問到。序列化是最高的事務隔離級別,同時代價也是最高的,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻讀

事務及其特性

事務是單個邏輯工作單元,要麼全部做完,要麼全部不做,事務由兩種狀態,乙個提交乙個回滾。事務由四個特性acid,原子性 一致性 隔離性和永遠性。1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性...

事務的特性

事務具有四個特徵 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 這四個特性簡稱為 acid 特性。1 原子性 事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都做,要麼都不做 2 一致性 事 務執行的結果必須是使資料庫從乙個...

事務特性(ACID)

原子性 是指事務乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。不能夠單獨執行。把一組操作放入事務中 一致性 事務的執行的前後,資料的完整性要得到保證。隔離性 強調的是多個使用者併發訪問資料庫的時候,乙個使用者事務不能被其他使用者的事務所干擾到,多個併發事務之間的資料要相互隔離。解決多...