摘要:事務(wù)處理事務(wù)的概念來自于兩個獨立的需求并發(fā)數(shù)據(jù)庫訪問,系統(tǒng)錯誤恢復(fù)。一致性事務(wù)將數(shù)據(jù)庫從一種一致狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致狀態(tài)。等多數(shù)數(shù)據(jù)庫默認(rèn)都是該級別。獨占鎖鎖,也叫排他鎖一次只能有一個獨占鎖用在一個資源上,并且阻止其他所有的鎖包括共享縮。
事務(wù)處理
事務(wù)的概念來自于兩個獨立的需求:并發(fā)數(shù)據(jù)庫訪問,系統(tǒng)錯誤恢復(fù)。
一個事務(wù)是可以被看作一個單元的一系列SQL語句的集合。
事務(wù)的特性(ACID)atomacity 原子性 :事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常,與某個事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個子集,則可能會破壞事務(wù)的總體目標(biāo)。原子性消除了系統(tǒng)處理操作子集的可能性。
consistency 一致性:事務(wù)將數(shù)據(jù)庫從一種一致狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致狀態(tài)。也就是說,事務(wù)在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)(各種 constraint 不被破壞)。
isolation 隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會查看中間狀態(tài)的數(shù)據(jù)。換句話說,一個事務(wù)的影響在該事務(wù)提交前對其他事務(wù)都不可見。
durability 持久性:事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。
事務(wù)的隔離級別如果不對數(shù)據(jù)庫進(jìn)行并發(fā)控制,可能會產(chǎn)生異常情況:
臟讀(Dirty Read)
當(dāng)一個事務(wù)讀取另一個事務(wù)尚未提交的修改時,產(chǎn)生臟讀。
一個事務(wù)開始讀取了某行數(shù)據(jù),但是另外一個事務(wù)已經(jīng)更新了此數(shù)據(jù)但沒有能夠及時提交。這是相當(dāng)危險的,因為很可能所有的操作都被回滾,也就是說讀取出的數(shù)據(jù)其實是錯誤的。
非重復(fù)讀(Nonrepeatable Read)
一個事務(wù)對同一行數(shù)據(jù)重復(fù)讀取兩次,但是卻得到了不同的結(jié)果。同一查詢在同一事務(wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時發(fā)生非重復(fù)讀。
幻像讀(Phantom Reads)
事務(wù)在操作過程中進(jìn)行兩次查詢,第二次查詢的結(jié)果包含了第一次查詢中未出現(xiàn)的數(shù)據(jù)(這里并不要求兩次查詢的SQL語句相同)。這是因為在兩次查詢過程中有另外一個事務(wù)插入數(shù)據(jù)造成的。
當(dāng)對某行執(zhí)行插入或刪除操作,而該行屬于某個事務(wù)正在讀取的行的范圍時,會發(fā)生幻像讀問題。
丟失修改(Lost Update)
第一類:當(dāng)兩個事務(wù)更新相同的數(shù)據(jù)源,如果第一個事務(wù)被提交,第二個卻被撤銷,那么連同第一個事務(wù)做的更新也被撤銷。
第二類:有兩個并發(fā)事務(wù)同時讀取同一行數(shù)據(jù),然后其中一個對它進(jìn)行修改提交,而另一個也進(jìn)行了修改提交。這就會造成第一次寫操作失效。
為了兼顧并發(fā)效率和異??刂?,在標(biāo)準(zhǔn)SQL規(guī)范中,定義了4個事務(wù)隔離級別,( Oracle 和 SQL Server 對標(biāo)準(zhǔn)隔離級別有不同的實現(xiàn) )
未提交讀(Read Uncommitted)
直譯就是讀未提交,意思就是即使一個更新語句沒有提交,但是別的事務(wù)可以讀到這個改變。
Read Uncommitted允許臟讀。
已提交讀(Read Committed)
直譯就是讀提交,意思就是語句提交以后,即執(zhí)行了 Commit以后別的事務(wù)就能讀到這個改變,只能讀取到已經(jīng)提交的數(shù)據(jù)。Oracle等多數(shù)數(shù)據(jù)庫默認(rèn)都是該級別。
Read Commited 不允許臟讀,但會出現(xiàn)非重復(fù)讀。
可重復(fù)讀(Repeatable Read):
直譯就是可以重復(fù)讀,這是說在同一個事務(wù)里面先后執(zhí)行同一個查詢語句的時候,得到的結(jié)果是一樣的。
Repeatable Read 不允許臟讀,不允許非重復(fù)讀,但是會出現(xiàn)幻象讀。
串行讀(Serializable)
直譯就是序列化,意思是說這個事務(wù)執(zhí)行的時候不允許別的事務(wù)并發(fā)執(zhí)行。完全串行化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞。
Serializable 不允許不一致現(xiàn)象的出現(xiàn)。
事務(wù)隔離的實現(xiàn)——鎖共享鎖(S鎖)
用于只讀操作(SELECT),鎖定共享的資源。共享鎖不會阻止其他用戶讀,但是阻止其他的用戶寫和修改。
更新鎖(U鎖)
用于可更新的資源中。防止當(dāng)多個會話在讀取、鎖定以及隨后可能進(jìn)行的資源更新時發(fā)生常見形式的死鎖。
獨占鎖(X鎖,也叫排他鎖)
一次只能有一個獨占鎖用在一個資源上,并且阻止其他所有的鎖包括共享縮。寫是獨占鎖,可以有效的防止“臟讀”。
Read Uncommited 如果一個事務(wù)已經(jīng)開始寫數(shù)據(jù),則另外一個數(shù)據(jù)則不允許同時進(jìn)行寫操作,但允許其他事務(wù)讀此行數(shù)據(jù)。該隔離級別可以通過“排他寫鎖”實現(xiàn)。
Read Committed 讀取數(shù)據(jù)的事務(wù)允許其他事務(wù)繼續(xù)訪問該行數(shù)據(jù),但是未提交的寫事務(wù)將會禁止其他事務(wù)訪問該行。可以通過“瞬間共享讀鎖”和“排他寫鎖”實現(xiàn)。
Repeatable Read 讀取數(shù)據(jù)的事務(wù)將會禁止寫事務(wù)(但允許讀事務(wù)),寫事務(wù)則禁止任何其他事務(wù)??梢酝ㄟ^“共享讀鎖”和“排他寫鎖”實現(xiàn)。
Serializable 讀加共享鎖,寫加排他鎖,讀寫互斥。
索引數(shù)據(jù)庫創(chuàng)建索引能夠大大提高系統(tǒng)的性能。
通過創(chuàng)建唯一性的索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。
可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著的減少查詢中分組和排序的時間。
通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
增加索引也有許多不利的方面。
創(chuàng)建索引和維護(hù)索引需要消耗時間,這種時間隨著數(shù)量的增加而增加。
索引需要占物理空間,除了數(shù)據(jù)表占據(jù)數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要額空間就會更大。
當(dāng)對表中的數(shù)據(jù)進(jìn)行增加,刪除和修改的時候,索引也要動態(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
應(yīng)該對如下的列建立索引
在作為主鍵的列上,強制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu)。
在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度。
在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的。
在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
在經(jīng)常使用在where子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
有些列不應(yīng)該創(chuàng)建索引
在查詢中很少使用或者作為參考的列不應(yīng)該創(chuàng)建索引。
對于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引(比如性別,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度)。
對于那些定義為text,image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因為,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。
當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引,因為修改性能和檢索性能是矛盾的。
創(chuàng)建索引的方法:直接創(chuàng)建和間接創(chuàng)建(在表中定義主鍵約束或者唯一性約束時,同時也創(chuàng)建了索引)。
索引的特征:
唯一性索引保證在索引列中的全部數(shù)據(jù)是唯一的,不會包含冗余數(shù)據(jù)。
復(fù)合索引就是一個索引創(chuàng)建在兩個列或者多個列上??梢詼p少在一個表中所創(chuàng)建的索引數(shù)量。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17625.html
摘要:布局垂直居中生命周期優(yōu)化手段常用的新特性面向?qū)ο笤颓懈钗募鞣N原生用法瀏覽器緩存機制機制 1 css布局2 垂直居中3 react生命周期 優(yōu)化手段 purerender4 es6常用的新特性5 this6 面向?qū)ο?原型7 webpack 切割文件8 array string各種原生用法9 promise10 瀏覽器緩存機制11 mobx機制
摘要:正如我標(biāo)題所說,簡歷被拒??戳宋液啔v之后說頭條競爭激烈,我背景不夠,點到為止。。三準(zhǔn)備面試其實從三月份投遞簡歷開始準(zhǔn)備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學(xué)投稿的面試經(jīng)歷 關(guān)注微信公眾號:進(jìn)擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學(xué)的分享 目錄: 印象中的頭條 面試背景 準(zhǔn)備面試 ...
閱讀 1834·2021-11-24 09:39
閱讀 2302·2021-09-30 09:47
閱讀 4169·2021-09-22 15:57
閱讀 1887·2019-08-29 18:36
閱讀 3589·2019-08-29 12:21
閱讀 599·2019-08-29 12:17
閱讀 1276·2019-08-29 11:25
閱讀 734·2019-08-28 18:26