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