1. 事務的原則介紹
2. 事務併發會造成的問題
3. MySQL的事務隔離級別
事務的原則
1、原子性:在事務中的操作,必須同時完成或者同時回滾,不會只成功或者回滾一部分。
2、一致性:不能破壞數據庫的一致性狀態。
3、隔離性:不同的事務之前互相不能影響。
4、持久性:事務完成以後,即保存數據,不會再回滾。
事務併發造成的問題
1、髒讀
事務A讀取了事務B更新的數據,然後B回滾操作,那麼A讀取到的數據是髒數據。
比如:
B把小明的年齡更新成12歲,但是事務還未提交。此時A來讀小明的年齡,讀到了12歲,然後去做自己的處理。之後B把小明的年齡回滾到11歲。這個例子中A讀到的12歲就是髒數據。
2、不可重複讀
事務A多次讀取同一數據,事務B在事務A多次讀取的過程中,對數據作了更新並提交,導致事務A多次讀取同一數據時,結果不一致。
比如:
B先把小明的餘額更新爲100元,A來讀的時候讀到的是100元,然後B又把餘額更新爲90元,此時A來讀的時候讀到的就是90元,也就是A讀到的數據前後不一致。
3、幻讀
事務A對錶中的數據進行了修改,涉及到表中的全部行。同時,事務B也修改這個表中的數據,向表中插入一行新數據。那麼,事務A發現表中還有自己沒有修改的行,就好象發生了幻覺一樣。
比如:
A先把所有人的餘額清零,同時,B往表中插入了一條餘額爲100的數據。A提交以後,發現竟然還有100的,命名剛剛都更新成0了呀。
MySQL的事務隔離級別
1、讀未提交:能讀到未提交的數據。
2、讀已提交:讀已提交的數據。
3、可重複讀:mysql默認,查詢的都是事務開始時的數據。
4、串行讀:完全串行化讀,每次都會鎖表,讀寫互相阻塞。