《MySQL事務詳解》要點:
本文介紹了MySQL事務詳解,希望對您有用。如果有疑問,可以聯系我們。
什么是事務(transaction)
保證成批操作要么完全執行,要么完全不執行,維護數據的完整性.也便是要么成功要么失敗.
事務可以是n條sql語句(n>=0)
不是所有數據庫引擎支持事務,InnoDB引擎支持事務處理
事務四大特性
原子性(Atomic):事務的所有所有操作要么全部執行,要么全部不執行.如果中途出現錯誤不會停止,而是回滾到事務前的狀態
一致性(Consistency):如果事務執行前是一致的,那么執行后也是一致的,不能破壞關系數據的完整性以及業務邏輯上的一致性,事務依照預期實現.
隔離性(Isolation):隔離性可以防止多個事務并發時導致數據的紛歧致
持久性(Durability):事務執行成功后對數據庫的修改是永久的
事務并發不進行事務隔離
臟讀:事務A讀到未提交事務B修改的數據,如果此時事務B中途執行失敗回滾,那么此時事務A讀取到的就是臟數據.好比事務A對money進行修改,此時事務B讀取到事務A的更新結果,但是如果后面事務A回滾,那么事務B讀取到的就是臟數據了.
弗成重復讀:同一個事務中,對同一份數據讀取的結果不一致.事務A在事務B對數據更新前進行讀取,然后事務B更新提交,事務A再次讀取,這時候兩次讀取的數據不同.
幻讀:同一個事務中,同一個查詢多次返回的結果不一樣.事務B查詢表的記錄數,然后事務A對表插入一條記錄,接著事務B再次查詢發現記錄數分歧.
區別
臟讀和弗成重復讀:臟讀是事務讀取了還未提交事務的更新數據.弗成重復讀是同一個事務中,幾次讀取的數據不同.
弗成重復讀和幻讀的區別:都是在同一個事務中,前者是幾次讀取數據不同,后者是幾次讀取數據整體不同.
隔離級別
隔離級別 | 作用 |
---|---|
Serializable(串行化) | 避免臟讀、弗成重復讀、幻讀 |
Repeatable(可重復讀) | 避免臟讀、弗成重復讀 |
Read committed(讀已提交) | 避免臟讀 |
Read uncommitted(讀未提交) | none |
mysql支持上面4種隔離級別,默認為可重復讀
事務的使用
start transcation;delete from user;
transcation 事務開始
rollback 回滾到事務起點
savepoint 保存回滾位置
rollback point_name 回滾到設置的位置
使用注意點
如果事務中sql正確運行,后面沒有commit,結果是不會更新到數據庫的,所以必要手動添加commit.
如果事務中部門sql語句出現錯誤,那么錯誤語句后面不會執行.而我們可能會認為正確操作會回滾撤銷,但是實際上并沒有撤銷正確的操作,此時如果再無錯情況下進行一次commit,之前的正確操作會生效,數據庫會進行更新.
《MySQL事務詳解》是否對您有啟發,歡迎查看更多與《MySQL事務詳解》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7093.html