資料庫事務的四大特性

2021-07-30 12:16:53 字數 2556 閱讀 3662

事務四大特性(簡稱acid

1、原子性(atomicity)

:事務中的全部操作在

資料庫中是不可分割的,要麼全部完成,要麼均不執行。 2、

一致性(consistency)

:幾個並行執行的事務,其執行結果必須與按某一順序序列執行的結果相一致。 3、

隔離性(isolation)

:事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。 4、

永續性(durability)

:對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障。   

資料庫可以保證原子性,一致性,永續性。但是隔離級別需要根據併發情況進行設定,

將資料庫設計成單執行緒,可以防止所有的執行緒安全問題,自然也就保證了隔離型的問題,但是如果這樣,那麼效率就會極其低下。

如果兩個執行緒併發修改,一定會相互搗亂,這時必須利用鎖機制防止多個執行緒的併發修改。

如果兩個執行緒併發查詢,沒有執行緒安全問題。

四大隔離級別

read uncommitted:---不防止任何隔離型問題,不能防止髒讀/不可重複讀/幻讀問題。

read commit:---可以防止髒讀問題,但是不能防止 不可重複讀/幻讀問題。(oracle預設隔離級別)

repeatable read:---可以防止髒讀/不可重複讀,不能防止幻讀。(mysql預設隔離級別)

serializable:--資料庫被設計為單執行緒,可以防止上述所有問題

髒讀:乙個事務讀取到另乙個事務未提交的資料。

場景:a賬戶1000,b賬戶1000,a到b的**裡買一百塊錢的鞋子。。。。

a:start transaction

update table set money=money-100 where name='a';//a賬戶扣除100

update table set money=money+100 where name='b';//b賬戶增加100

此時a還沒有提交事務,對b說付款成功

b:start transaction;//b開始查詢自己的賬戶餘額

select money form table where name='b';

b:commit;

如果讀取到了a沒有提交的資料,那麼b查出來的就會是1100,此時b開始發貨

此時a執行回滾

a:rollback;

那麼b再去查詢賬戶餘額會發現自己的賬戶還是原先的100塊

不可重複讀:在當前事務中,讀取到了另一事務提交的更新和刪除的資料。

場景:如果a有活期資金1000,定期1000,固定資產1000

a: 1000 1000 1000

b: 銀行職員,銀行讓職員b算出a客戶的總共資產

---------

b:start transaction;

select 活期存款 from account where name='a'; ---- 活期存款:1000

select 定期存款 from account where name='a'; ---- 定期存款:1000

select 固定資產 from account where name='a'; ---- 固定資產:1000 

-------此時a客戶取走了自己活期的1000元

a:start transaction;

update accounset set 活期=活期-1000 where name='a';

commit;

-------

select 活期+定期+固定 from account where name='a'; --- 總資產:2000,按照之前查出來的應該是3000元,但是現在是2000元

commit;

----------

但是雖然在這種場景下,出現了不可重複讀,但是如果在另一場景下,如果你和你的夥伴共用乙個銀行賬戶共100萬,你的夥伴如果中途取走了50萬,而你此時讀取到剩下的50萬,就符合該場景。

幻讀:在當前事務中,讀取到了另一事務提交的插入的資料

場景:如果銀行現在有a、b兩位客戶存款各1000,銀行老闆讓職員b去算平均每個客戶的平均存款,而又有新增客戶c存入了4000元。

a: 1000

b: 1000

d: 銀行業務人員

-----------

d:start transaction;

select sum(money) from account; --- 2000 元

select count(name) from account; --- 2 個

------

c:start transaction;

insert into account values(c,4000);

commit;

------

select sum(money)/count(name) from account; --- 平均:2000元/個,結果應該是平均存款1000,而實際結果確實2000

commit;

------------

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...

資料庫事務四大特性

資料庫事務是指作為單個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。資料庫事務的四大特性 簡稱acid 是 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。例如銀行取款事務分為...

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...