简述一下你对mysql事物的理解_面试题:说说你对数据库事务的理解
在回答這個問題的時候首先要考慮的是這里面包含了哪些知識點是我們要回答的,
第一個要點:什么是事務;
第二個要點:數(shù)據(jù)庫的基本特性是什么?
第三個要點:什么是事務隔離,有哪些事務隔離級別?
什么是事務
數(shù)據(jù)庫中的事務是作為單個邏輯工作單元執(zhí)行的一系列操作。(多條 SQL 語句,要么全部執(zhí)行成功,要么全部執(zhí)行失敗。)
數(shù)據(jù)庫要支持事務操作必須滿足四個特性,也就是常說的ACID:
A:原子性(Atomicity):原子性是指事務包含的所有操作要么全部成功,要么全部失敗
C:一致性(Consistency):一個事務執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。
I:隔離性(Isolation):多個事務在執(zhí)行同一個操作時不能被其他事務干擾。
D:持久性(dependency):一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的
什么是事務隔離,有哪些事務隔離級別?
事務的隔離性就是指,多個并發(fā)的事務同時訪問一個數(shù)據(jù)庫時,一個事務不應該被另一個事務所干擾,每個并發(fā)的事務間要相互進行隔離。
一般的數(shù)據(jù)庫,都包括以下四種隔離級別:
讀未提交(Read Uncommitted)
讀提交(Read Committed)
可重復讀(Repeated Read)
串行化(Serializable)
讀未提交(Read Uncommitted)
讀未提交,就是可以讀到未提交的內(nèi)容。
因此,在這種隔離級別下,查詢是不會加鎖的,也由于查詢的不加鎖,所以這種隔離級別的一致性是最差的,可能會產(chǎn)生“臟讀”、“不可重復讀”、“幻讀”。
讀提交(Read Committed)
讀提交,就是讀到已經(jīng)提交了的內(nèi)容。
這是各種系統(tǒng)中最常用的一種隔離級別,也是SQL Server和Oracle的默認隔離級別。這種隔離級別能夠有效的避免臟讀,但除非在查詢中顯示的加鎖。“讀提交”只能避免“臟讀”,并不能避免“不可重復讀”和“幻讀”。
可重復讀(Repeated Read)
可重復讀,就是專門針對“不可重復讀”這種問題而制定的隔離級別,它可以有效的避免“不可重復讀”。并且它也是MySql的默認隔離級別。
當事務啟動時,不允許進行“修改操作(Update)”,而“不可重復讀”恰恰是因為兩次讀取之間進行了數(shù)據(jù)的修改,因此,“可重復讀”能夠有效的避免“不可重復讀”,但卻避免不了“幻讀”,因為幻讀是由于“插入或者刪除操作(Insert or Delete)”而產(chǎn)生的。
串行化(Serializable)
數(shù)據(jù)庫最高的隔離級別,這種級別下,事務“串行化順序執(zhí)行”,也就是一個一個排隊執(zhí)行(每一行數(shù)據(jù)都進行了加鎖)。
這種級別下,“臟讀”、“不可重復讀”、“幻讀”都不會出現(xiàn),但是執(zhí)行效率非常差,性能開銷也最大,所以基本沒人會用。
總結(jié)
以上是生活随笔為你收集整理的简述一下你对mysql事物的理解_面试题:说说你对数据库事务的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php session mysql_ph
- 下一篇: mysql数据库自动重新连接_mysql