1,事務特性:sql
數據庫的事務特性有四個,分別是原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持久性(Durability),也就是傳說中的ACID。他們大概的意思就是:數據庫
(1)原子性:一個事物會包括不少操做,好比增刪改,原子性就是要保證這些操做,要麼所有成功,若是有一個失敗,那麼所有失敗。併發
(2)一致性:事務執行前和事務執行後應保持庫一致,感受像沒說同樣,一個例子,一個事物的操做爲將A表的數據存到B表中,那麼當事務執行完畢以後,必須保證A+B跟事務執行前的A+B值是同樣的事務
(3)隔離性:事務和事務之間的特性,兩個事務相互隔離,互相不影響ci
(4)持久性:事務執行完畢以後,表中的數據就持久下來,不會本身沒事就消失了it
2,事務的隔離級別io
事務的隔離級別,指的就是事務的四個特性中的隔離性的級別,按照隔離的強度區別,分爲四個級別序列化
(1)讀未提交:數據
指的是一個事務能夠讀出另外一個事務未提交的結果,舉個例子:發工資了,經理準備給小王發50000塊錢,執行了一個sql,將50000塊錢存到了小王的表裏,小王這時候看到了很開心,以爲瞬間從屌絲變成了高富帥,這時候經理髮現不對,多打了一個0!!因而就執行了一個sql,修改了50000變成了5000,而後提交了事務,這時候小王取錢,只能取到5000了。存儲引擎
(2)讀已提交
指的是事務只能讀到別的事務提交後的結果,也就是說別的事務在執行彼此是隔離的,這個隔離級別會產生一個問題就是髒讀,好比你開啓一個事物讀取一個數據庫數據的時候,事務沒有提交,另外一個事務正在修改你讀的這條數據而且提交事務,當你再讀取的時候就會發現,跟上一次讀的結果不一樣,由於你讀的數據被修改了
(3)可重複讀
開啓一個事物A讀取某個範圍的數據,返回結果可是並不提交事務,另外一個事務對讀取的這個範圍的數據進行修改而且提交事務,這時候,事務A中再次再次讀取數據的時候,數據不變,跟第一次讀取的一致,可是若是此時另外一個事務在這個範圍內插入數據的時候,事務A再次讀取數據會跟以前讀取的不一致,這就是幻讀,INNODB存儲引擎已經解決了這個問題
(4)序列化
這個是最嚴格的隔離級別,無論你啥操做,必須得按照嚴格的順序執行,不會有任何併發發生,通常數據庫不會採起這個級別