事務四大特性(簡稱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 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...