大數(shù)據(jù)就業(yè)實戰(zhàn)培訓 Oracle就業(yè)實戰(zhàn)培訓
PostgreSQL:
PostgreSQL支持事務的強一致性,事務保證性好,完全支持ACID特性。
MySQL:
MySQL只有innodb引擎支持事務,事務一致性保證上可根據(jù)實際需求調(diào)整,為了最大限度的保護數(shù)據(jù),MySQL可配置雙一模式,對ACID的支持上比PG稍弱弱。
事務的四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位,事務中的操作要么全部成功,要么全部失敗。比如在同一個事務中的SQL語句,要么全部執(zhí)行成功,要么全部執(zhí)行失敗。
begin transaction;
update account set money = money-100 where name = '張三';
update account set money = money+100 where name = '李四';
commit transaction;
一致性(Consistency)
官網(wǎng)上事務一致性的概念是:事務必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。
換一種方式理解就是:事務按照預期生效,數(shù)據(jù)的狀態(tài)是預期的狀態(tài)。
舉例說明:張三向李四轉(zhuǎn)100元,轉(zhuǎn)賬前和轉(zhuǎn)賬后的數(shù)據(jù)是正確的狀態(tài),這就叫一致性,如果出現(xiàn)張三轉(zhuǎn)出100元,李四賬號沒有增加100元這就出現(xiàn)了數(shù)據(jù)錯誤,就沒有達到一致性。
隔離性(Isolation)
事務的隔離性是多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務,不能被其他事務的操作數(shù)據(jù)所干擾,多個并發(fā)事務之間要相互隔離。
持久性(Durability)
持久性是指一個事務一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來即使數(shù)據(jù)庫發(fā)生故障也不應該對其有任何影響。
例如我們在使用JDBC操作數(shù)據(jù)庫時,在提交事務方法后,提示用戶事務操作完成,當我們程序執(zhí)行完成直到看到提示后,就可以認定事務以及正確提交,即使這時候數(shù)據(jù)庫出現(xiàn)了問題,也必須要將我們的事務完全執(zhí)行完成,否則就會造成我們看到提示事務處理完畢,但是數(shù)據(jù)庫因為故障而沒有執(zhí)行事務的重大錯誤。