一、事務是什麼
事務是一條或多條資料庫操作語句的組合,具備ACID四個特徵:
原子性(Atomicity)
幻讀
在一個事務的兩次查詢中資料行數不一致。例如一個事務查詢了幾列數據,而另外一個事務在此時插入了新的幾列數據,第一個事務在接下來的查詢中會發現有幾列數據是它之前沒有的,就好像產生幻覺一樣,這就是發生了幻讀。
三、事務隔離等級
事務隔離等級解決了什麼並發問題,還存在什麼並發問題?
1、Read Uncommitted(讀取未提交內容)
這是事務最低的隔離級別,它充許另外一個事務可以看到這個事務未提交的資料。對並發出現的任何問題都無法避免。
2、Read Committed(讀取提交內容)
保證一個事務修改的資料提交後才能被另外一個事務讀取,即另外一個事務不能讀取該事務未提交的資料。可避免髒讀的發生,但會出現不可重複讀、幻讀。
3、Repeatable Read(可重讀)
這是MySQL的預設事務隔離級別,它確保相同交易的多個實例在並發讀取資料時,會看到同樣的資料。可避免髒讀、不可重複讀的發生,但會出現幻讀。
4、Serializable(可串行化)
這是最高的隔離級別,它透過強制事務排序,使其不可能相互衝突。在這個級別,可能導致大量的超時現象和鎖定競爭。可避免髒讀、不可重複讀、幻讀的發生。
下一篇介紹InnoDB引擎的鎖定機制。