MySQL高級知識(十一)——數據庫事務

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、串行讀:完全串行化讀,每次都會鎖表,讀寫互相阻塞。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章