事務及其特性ACID

2022-08-31 11:06:07 字數 1670 閱讀 2522

事務是一組單元化的操作,這組操作可以保證要麼全部成功,要麼全部失敗(只要有乙個失敗的操作,就會把其他已經成功的操作回滾)。

一般所說的資料庫事務,它是訪問並可能更新資料庫中各種資料項的乙個程式執行單元,由乙個有限的資料庫操作序列構成。當事務被提交給了dbms(資料庫管理系統),則dbms(資料庫管理系統)需要確保該事務中的所有操作都成功完成且其結果被永久儲存在資料庫中,如果事務中有的操作沒有成功完成,則事務中的所有操作都需要被回滾,回到事務執行前的狀態;同時,該事務對資料庫或者其他事務的執行無影響,所有的事務都好像在獨立的執行。

1、原子性(a)

所謂的原子性就是說,在整個事務中的所有操作,要麼全部完成,要麼全部不做,沒有中間狀態。對於事務在執行中發生錯誤,所有的操作都會被回滾,整個事務就像從沒被執行過一樣。

2、一致性(c)

事務的執行必須保證系統的一致性,就拿轉賬為例,a有300元,b有100元,如果在乙個事務裡a成功轉給b50元,那麼不管併發多少,不管發生什麼,只要事務執行成功了,那麼最後a賬戶一定是250元,b賬戶一定是150元。

3、隔離性(i)

所謂的隔離性就是說,事務與事務之間不會互相影響,乙個事務的中間狀態不會被其他事務感知。 即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。事務有多種隔離級別。

4、永續性(d)

所謂的永續性,就是說一旦事務完成了,那麼事務對資料所做的變更就完全儲存在了資料庫中,即使發生停電,系統宕機也是如此。

事務的原子性、一致性和永續性,資料庫管理系統採用日誌來保證。日誌記錄了事務對資料庫所做的操作,如果某個事務在執行過程中發生錯誤,就可以根據日誌,撤銷事務對資料庫已做的操作,使資料庫退回到執行事務前的初始狀態。

事務的隔離性,資料庫管理系統採用鎖機制來實現。當多個事務同時更新資料庫中相同的資料時,只允許持有鎖的事務能更新該資料,其他事務必須等待,直到前乙個事務釋放了鎖,其他事務才有機會更新該資料。

特別說明:原子性並不能保證一致性,所以有了原子性為什麼還要一致性

對於單個事務,原子性就能保證一致性,但是對於多個併發執行的事務,即使每個事務都是原子執行的,但它們同時執行的話,最終效果可能會不一致。舉例如下:

有a、b、c三個賬戶各有200元錢,其中事務1是a向b轉賬100,則執行語句如下:

update a set amount=amount-

100where id =1;

update b set amount=amount+

100where id =

1;

事務2是c向b轉賬100,則執行語句如下:

update c set amount=amount-

100where id =1;

update b set amount=amount+

100where id =

1;

如果事務1和事務2同時執行的一致性結果應該是b賬戶裡面有300元錢,但是在併發事務下,事務1和事務2同時執行時,兩個事務讀到的賬戶b的當前金額都可能是100(髒讀),不管兩個事務誰先執行完成,最終的執行結果都是b賬戶金額為200。這就是事務特性除了原子性外還需要一致性。因此,要達到事務的一致性,除了要保證單個事務的原子性之外,還要保證事務之間的隔離性

事務特性(ACID)

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

事務ACID特性

所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉帳工作 從乙個帳號扣款並使另乙個帳號增款,這兩個操作要麼都執行,要麼都不執行。資料庫事務必須具備acid特性,acid是atomic 原子性 consistency 一致性 isolation 隔離...

事務ACID特性

所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉帳工作 從乙個帳號扣款並使另乙個帳號增款,這兩個操作要麼都執行,要麼都不執行。資料庫事務必須具備acid特性,acid是atomic 原子性 consistency 一致性 isolation 隔離...