1.什麼是事務。數據庫
事務就是一組原子性的SQL 查詢,或者說一個獨立的工做單元。若是數據庫引擎可以成功的對數據庫應用該組查詢的所有語句,那麼就執行該組查詢。安全
2.事務的特性(ACID)併發
一個事務必須被視爲一個不可分割的最小工做單元,整個事務中的全部操做要麼所有提交成功,要麼所有失敗回滾,對於一個事務來講,不可能只執行其中的一部分操做,這就是事務的原子性。性能
原子性就是要麼作,要不不作,裏面的SQL 要麼都成功,要麼都不成功。undo log回滾日誌,記錄SQL 執行的相關信息,innodb實現回滾靠的是undo logatom
數據庫老是從一個一致性的狀態轉換到另一個一致性的狀態。事務最終沒有提交下,事務中所作的修改也不會保存到數據庫中。
體現數據庫完整性沒有被破壞,數據先後一致。
A 轉帳B 100,結果是 A 少100, B 多100, 先後一致。日誌
一般來講,一個事務所作的修改在最終提交之前,對其餘事務是不可見的。
事務內部的操做與其餘的事務是隔離的,併發執行的各個事務之間不能互相干擾。
一個事務寫操做對另外一個寫操做影響:鎖機制保證隔離
一個事務寫操做對另外一個讀操做影響:MVCC 保證隔離事務
一旦事務提交,則其所作的修改就會永久保存到數據庫中。此時即便系統崩潰,修改的數據也不會丟失。(就是說事務一旦提交,對數據庫的改變是永久的)內存
總結:
一個兼容ACID的數據庫系統,須要作不少複雜但可能用戶並無覺察到的工做,才能確保ACID的實現就像鎖粒度的升級會增長系統開銷同樣,這種事務處理過程當中額外的安全性,也會須要數據庫系統作更多的額外工做。ci
一個實現了ACID的數據庫,相比沒有實現ACID的數據庫,一般會須要更強的CPU處理能力、更大的內存和更多的磁盤空間。用戶能夠根據業務是
否須要事務處理,來選擇合適的存儲引擎。對於一些不須要事務的查詢類應用,選擇個非事務型的存儲引擎,能夠得到更高的性能。即便存儲引擎不支持事務,也能夠經過LOCK TABLES語句爲應用提供必定程度的保護,這些選擇用戶均可以自主決定。it