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