數據庫事務( transaction) 是訪問並可能操做各類數據項的一個數據庫操做序列,這些操做要麼所有執行成功,要麼所有執行失敗,是一個不可分割的工做單位。
sql
通俗地說就是指一組sql語句組成的數據庫邏輯處理單元,在這組的sql操做中,要麼所有執行成功,要麼所有執行失敗。數據庫
舉個簡單又經典的例子就是轉帳了,事務A中要進行轉帳,那麼轉出的帳號要扣錢,轉入的帳號要加錢,這兩個操做都必須同時執行成功,爲了確保數據的一致性。併發
在Mysql中事務的四大特性主要包含:原子性(Atomicity)、一致性(Consistent)、隔離性(Isalotion)、持久性(Durable),簡稱爲ACID。
性能
Redo/Undo
機制Undo Log 是爲了實現事務的原子性,在MySQL數據庫InnoDB存儲引擎中,還用Undo Log來實現多版本併發控制(簡稱:MVCC)。
日誌
經過Undo/Redo操做,可實現界面操做過程的撤銷和恢復。code
隔離級別解決了哪些問題
cdn
髒讀(dirty read):若是一個事務讀到了另外一個未提交事務修改過的數據。
blog
不可重複讀(non-repeatable read):若是一個事務只能讀到另外一個已經提交的事務修改過的數據,而且其餘事務每對該數據進行一次修改並提交後,該事務都能查詢獲得最新值。
事務
幻讀(phantom read):若是一個事務先根據某些條件查詢出一些記錄,以後另外一個事務又向表中插入了符合這些條件的記錄,原先的事務再次按照該條件查詢時,能把另外一個事務插入的記錄也讀出來。
ci
MySQL中的鎖大體能夠分爲:
MyISAM和MEMORY存儲引擎採用的是表級鎖(table-level locking);
BDB存儲引擎採用的是頁面鎖(page-level locking),但也支持表級鎖;
InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認狀況下是採用行級鎖。
在四個隔離級別中加鎖確定是要消耗性能的,而讀未提交是沒有加任何鎖的,因此對於它來講也就是沒有隔離的效果,因此它的性能也是最好的。