建設(shè)銀行博士后招聘網(wǎng)站營銷推廣軟件有哪些
在日常生活中,我們會遇到一個場景,那就是在轉(zhuǎn)賬的時候,A有1000塊錢,要給B轉(zhuǎn)賬500,那么最后的結(jié)果是A有500,B有500,但是也有可能出現(xiàn)A沒有錢了,B有1000塊,或者在轉(zhuǎn)賬過程中卡頓,這是不符合邏輯的,那么這個時候就要使用事務(wù)來解決問題
事務(wù)就是把一堆sql語句打包成一個整體,要么全都執(zhí)行,要么就不執(zhí)行,那么是真的沒有執(zhí)行嗎,其實這是一個假象,其實執(zhí)行了,只是沒有顯現(xiàn)出來,執(zhí)行了,執(zhí)行到一半發(fā)現(xiàn)卡頓了,那么就還原到?jīng)]執(zhí)行 的樣子.這個過程叫做回滾" roll back"
在回滾的過程中,我們要怎樣知道回滾到哪一個地步了呢,需要額外的部分記錄具體的操作,數(shù)據(jù)庫中有專門的的事務(wù)記錄日志,因此使用事務(wù)執(zhí)行sql是非常耗費空間的
下面來看一看的事務(wù)執(zhí)行的相關(guān)代碼
start transaction//開啟事務(wù)
update? account?set? money=money-200? ? where? name='李四';
update? ?account set? money=money+200? where? name='張三'
commit //提交事務(wù) 相等于事務(wù)已經(jīng)執(zhí)行完了
從start到commit之間的這段就是事務(wù)具體執(zhí)行的操作
下面,來討論一次啊數(shù)據(jù)庫事務(wù)的特性
面試愛考的點
1.原子性
2.一致性? 執(zhí)行完前后數(shù)據(jù)對得上
3.持久性? 事務(wù)修改的內(nèi)容在硬盤上,可以持久保存
4.隔離性? 這個是最難理解的,這個特性是為了解決并發(fā)執(zhí)行事務(wù),引起的問題
舉個例子,去餐館吃飯
如果一次性來了很多人,大家點不一樣的餐,那么大廚如果只有一口鍋,那么可以一個一個做,如果很多鍋,可以一起炒
此時餐館作為服務(wù)器,要處理顧客也就是客戶端的請求,一次性來很多條請求,就需要一起處理,
數(shù)據(jù)庫本質(zhì)是服務(wù)器,那么處理大量請求,就是并發(fā)執(zhí)行事務(wù)的過程
并發(fā)執(zhí)行任務(wù)產(chǎn)生的問題以及數(shù)據(jù)庫利用隔離性的解決辦法
1.臟讀問題
事務(wù)A在修改數(shù)據(jù)時,事務(wù)B讀取了數(shù)據(jù),而事務(wù)A在改完數(shù)據(jù)以后提交了,那么事務(wù)B原來讀取的數(shù)據(jù)就是無效的,事務(wù)B讀取的過程叫做臟讀,讀取到的數(shù)據(jù)叫做臟數(shù)據(jù)
解決辦法
給寫加鎖,也就是在事務(wù)A寫的時候或者改的時候,事務(wù)B不可以讀,這樣寫操作和讀操作不能同時并發(fā)執(zhí)行了不能一起干
這樣做降低了并發(fā)程度(降低了效率),提高了隔離性(提高了數(shù)據(jù)的準(zhǔn)確性)
2.不可重復(fù)讀
具體是這樣的,事務(wù)A已經(jīng)提交了數(shù)據(jù),事務(wù)B開始讀,而在事務(wù)B讀的過程中,事務(wù)A又修改了數(shù)據(jù)提交,事務(wù)B在讀的時候發(fā)現(xiàn)數(shù)據(jù)改變了,也就是在讀的一次過程中,出現(xiàn)了不同的結(jié)果,就叫做"不可重復(fù)讀"
解決辦法
給讀加鎖,就是只能讀,不能修改,在事務(wù)B讀的過程中事務(wù)A不可以進行修改
進一步降低了并發(fā)程度(降低了效率),提高了事務(wù)的隔離性(進一步提高了數(shù)據(jù)的準(zhǔn)確性)
3.幻讀問題
事務(wù)A在寫的時候事務(wù)B不可以讀,事務(wù)B在讀的時候事務(wù)A不可以寫,這樣在讀加鎖和寫加鎖的前提下,這樣不會出現(xiàn)上述的兩種情況,但是在事務(wù)B讀1文件數(shù)據(jù)時,事務(wù)A可能又創(chuàng)建了一個文件,并且提交了
這個時候讀到的結(jié)果集不一樣了,就是讀著讀著多出現(xiàn)了一個文件,這就叫做幻讀
解決辦法
數(shù)據(jù)庫使用"串行化"方式解決幻讀的問題,放棄并發(fā)處理事務(wù),一個一個串行處理事務(wù)
臟讀? ? ? ? ? ? ? ? ?給寫加鎖
不可重復(fù)讀? ? ? 給讀加鎖
幻讀? ? ? ? ? ? ? ? ?串行化處理
是并發(fā)處理事務(wù)產(chǎn)生的問題
面對上述三種問題
mysql提供了四種隔離級別
1.? read? ?uncommitted? ?沒有任何鎖限制,并發(fā)程度最高(效率最低),隔離性最低(數(shù)據(jù)準(zhǔn)確性最低)
2.read? ? ? committed? ? ? 給寫加鎖,并發(fā)程度降低(效率提高),隔離性提高(數(shù)據(jù)準(zhǔn)確性提高)
3.repeatable? ?read? ? ? ? ? 給讀和寫都加鎖,并發(fā)程度進一步降低(效率進一步提高),隔離性進一步提高(數(shù)據(jù)準(zhǔn)確性進一步提高)
4.serializable? ? ? ? ? ?串行化處理事務(wù)? ? ? ? 并發(fā)程度最低,隔離性最高
加鎖本質(zhì)上是cpu?指令,后期在詳細講解
今天就講解到這里,下期再見,886!!!