版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)程序員面試分類真題4簡(jiǎn)答題1.
什么是反范式?反范式有什么優(yōu)缺點(diǎn)?正確答案:數(shù)據(jù)庫(kù)設(shè)計(jì)要嚴(yán)格遵守范式,這樣設(shè)計(jì)出來(lái)的數(shù)據(jù)庫(kù),雖然思路很清晰,結(jié)構(gòu)也很合理,但是,有時(shí)候卻要在一定程度上打破范式(江南博哥)設(shè)計(jì)。因?yàn)榉妒皆礁?,設(shè)計(jì)出來(lái)的表可能越多,關(guān)系可能越復(fù)雜,但是性能卻不一定會(huì)很好,因?yàn)楸硪欢?,就增加了關(guān)聯(lián)性。特別是在高可用的OLTP數(shù)據(jù)庫(kù)中,這一點(diǎn)表現(xiàn)得很明顯,所以就引入了反范式。
不滿足范式的模型,就是反范式模型。反范式與范式所要求的正好相反,在反范式的設(shè)計(jì)模式中,可以允許適當(dāng)?shù)臄?shù)據(jù)冗余,用這個(gè)冗余可以縮短查詢獲取數(shù)據(jù)的時(shí)間。反范式其本質(zhì)上就是用空間來(lái)?yè)Q取時(shí)間,把數(shù)據(jù)冗余在多個(gè)表中,當(dāng)查詢時(shí)就可以減少或者避免表之間的關(guān)聯(lián)。反范式技術(shù)也可以稱為反規(guī)范化技術(shù)。
反范式的優(yōu)點(diǎn):減少了數(shù)據(jù)庫(kù)查詢時(shí)表之間的連接次數(shù),可以更好地利用索引進(jìn)行篩選和排序,從而減少了I/O數(shù)據(jù)量,提高了查詢效率。
反范式的缺點(diǎn):數(shù)據(jù)存在重復(fù)和冗余,存在部分空間浪費(fèi)。另外,為了保持?jǐn)?shù)據(jù)的一致性,必須維護(hù)這部分冗余數(shù)據(jù),因此增加了維護(hù)的復(fù)雜性。所以,在進(jìn)行范式設(shè)計(jì)時(shí),要在數(shù)據(jù)一致性與查詢之間找到平衡點(diǎn),因?yàn)榉蠘I(yè)務(wù)場(chǎng)景的設(shè)計(jì)才是好的設(shè)計(jì)。
范式和反范式的對(duì)比見(jiàn)下表。模型優(yōu)點(diǎn)缺點(diǎn)范式化模型數(shù)據(jù)沒(méi)有冗余,更新容易當(dāng)表的數(shù)量比較多,查詢?cè)O(shè)計(jì)需要很多關(guān)聯(lián)模型(Join)時(shí),會(huì)導(dǎo)致查詢性能低下反范式化模型數(shù)據(jù)冗余將帶來(lái)很好的讀取性能(因?yàn)椴恍枰P(guān)聯(lián)很多表,而且通常反范式模型很少做更新操作)需要維護(hù)冗余數(shù)據(jù),從目前NoSQL的發(fā)展可以看到,對(duì)磁盤空間的消耗是可以接受的[考點(diǎn)]反范式
2.
常見(jiàn)的數(shù)據(jù)庫(kù)反范式技術(shù)有哪些?正確答案:在RDBMS模型設(shè)計(jì)過(guò)程中,常常使用范式來(lái)約束模型,但在NoSQL模型中則大量采用反范式。常見(jiàn)的數(shù)據(jù)庫(kù)反范式技術(shù)包括:
1)增加冗余列。在多個(gè)表中保留相同的列,以減少表連接的次數(shù)。冗余法以空間換取時(shí)間,把數(shù)據(jù)冗余在多個(gè)表中,當(dāng)查詢時(shí)可以減少或者避免表之間的關(guān)聯(lián)。
2)增加派生列。表中增加可以由本表或其他表中數(shù)據(jù)計(jì)算生成的列,減少查詢時(shí)的連接操作并避免計(jì)算或使用集合函數(shù)。
3)表水平分割。根據(jù)一列或多列的值將數(shù)據(jù)放到多個(gè)獨(dú)立的表中,主要用于表的規(guī)模很大、表中數(shù)據(jù)相對(duì)獨(dú)立或數(shù)據(jù)需要存放到多個(gè)介質(zhì)的情況。
4)表垂直分割。對(duì)表按列進(jìn)行分割,將主鍵和一部分列放到一個(gè)表中,主鍵與其他列放到另一個(gè)表中,在查詢時(shí)減少I/O次數(shù)。
例如,有學(xué)生表與課程表,假定課程表要經(jīng)常被查詢,而且在查詢中要顯示學(xué)生的姓名,則查詢語(yǔ)句為
SELECTCODE,NAME,SUBJECTFROMCOURSEC,STUDENTSWHERES.ID=C.CODEWHERECODE=?
如果這個(gè)語(yǔ)句被大范圍、高頻率地執(zhí)行,那么可能會(huì)因?yàn)楸黻P(guān)聯(lián)造成一定程度的影響,現(xiàn)在,評(píng)估到學(xué)生改名的需求是非常少的,那么,就可以把學(xué)生姓名冗余到課程表中。注意:這里并沒(méi)有省略學(xué)生表,只不過(guò)是把學(xué)生姓名冗余在了課程表中,如果萬(wàn)一有很少的改名需求,只要保證在課程表中改名正確即可。
那么,修改以后的語(yǔ)句可以簡(jiǎn)化為
SELECTCODE,NAME,SUBJECTFROMCOURSECWHERECODE=?[考點(diǎn)]反范式
3.
事務(wù)可以分為哪幾類?正確答案:從事務(wù)理論的角度來(lái)看,可以把事務(wù)分為以下幾種類型:
1)扁平事務(wù)(FlatTransactions)。
2)帶有保存點(diǎn)的扁平事務(wù)(FlatTransactionswithSavepoints)。
3)鏈?zhǔn)聞?wù)(ChainedTransactions)。
4)嵌套事務(wù)(NestedTransactions)。
5)分布式事務(wù)(DistributedTransactions)。[考點(diǎn)]分類
4.
什么是XA事務(wù)?正確答案:XA(eXtendedArchitecture)是指由X/Open組織提出的分布式交易處理的規(guī)范。XA是一個(gè)分布式事務(wù)協(xié)議,由Tuxedo提出,所以,分布式事務(wù)也稱為XA事務(wù)。XA協(xié)議主要定義了事務(wù)管理器(TransactionManager,TM,協(xié)調(diào)者)和資源管理器(ResourceManager,RM,參與者)之間的接口。其中,資源管理器往往由數(shù)據(jù)庫(kù)實(shí)現(xiàn),例如Oracle、DB2、MySQL,這些商業(yè)數(shù)據(jù)庫(kù)都實(shí)現(xiàn)了XA接口,而事務(wù)管理器作為全局的調(diào)度者,負(fù)責(zé)各個(gè)本地資源的提交和回滾。XA事務(wù)是基于兩階段提交(Two-phaseCommit,2PC)協(xié)議實(shí)現(xiàn)的,可以保證數(shù)據(jù)的強(qiáng)一致性,許多分布式關(guān)系型數(shù)據(jù)管理系統(tǒng)都采用此協(xié)議來(lái)完成分布式。階段一為準(zhǔn)備階段,即所有的參與者準(zhǔn)備執(zhí)行事務(wù)并鎖住需要的資源。當(dāng)參與者準(zhǔn)備好時(shí),向TM匯報(bào)自己已經(jīng)準(zhǔn)備好。階段二為提交階段。當(dāng)TM確認(rèn)所有參與者都準(zhǔn)備好后,向所有參與者發(fā)送COMMIT命令。
XA事務(wù)允許不同數(shù)據(jù)庫(kù)的分布式事務(wù),只要參與在全局事務(wù)中的每個(gè)節(jié)點(diǎn)都支持XA事務(wù)。Oracle、MySQL和SQLServer都支持XA事務(wù)。
XA事務(wù)由一個(gè)或多個(gè)資源管理器(RM)、一個(gè)事務(wù)管理器(TM)以及一個(gè)應(yīng)用程序(ApplicationProgram)組成。
1)資源管理器:提供訪問(wèn)事務(wù)資源的方法。通常一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)資源管理器。
2)事務(wù)管理器:協(xié)調(diào)參與全局事務(wù)中的各個(gè)事務(wù)。需要和參與全局事務(wù)的所有資源管理器進(jìn)行通信。
3)應(yīng)用程序:定義事務(wù)的邊界。
XA事務(wù)的缺點(diǎn)是性能不好,并且XA無(wú)法滿足高并發(fā)場(chǎng)景。一個(gè)數(shù)據(jù)庫(kù)的事務(wù)和多個(gè)數(shù)據(jù)庫(kù)間的XA事務(wù)性能會(huì)相差很多。因此,要盡量避免XA事務(wù),例如可以將數(shù)據(jù)寫入本地,用高性能的消息系統(tǒng)分發(fā)數(shù)據(jù),或使用數(shù)據(jù)庫(kù)復(fù)制等技術(shù)。只有在其他辦法都無(wú)法實(shí)現(xiàn)業(yè)務(wù)需求,且性能不是瓶頸時(shí)才使用XA。[考點(diǎn)]分類
5.
臟讀、不可重復(fù)讀和幻讀的區(qū)別是什么?正確答案:當(dāng)多個(gè)線程都開(kāi)啟事務(wù)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)系統(tǒng)要能進(jìn)行隔離操作,以保證各個(gè)線程獲取數(shù)據(jù)的準(zhǔn)確性,所以,對(duì)于不同的事務(wù),采用不同的隔離級(jí)別會(huì)有不同的結(jié)果。如果不考慮事務(wù)的隔離性,那么會(huì)發(fā)生下表所示的3種問(wèn)題。
臟讀和不可重復(fù)讀的區(qū)別:臟讀是某一事務(wù)讀取了另一個(gè)事務(wù)未提交的臟數(shù)據(jù),而不可重復(fù)讀則是在同一個(gè)事務(wù)范圍內(nèi)多次查詢同一條數(shù)據(jù)卻返回了不同的數(shù)據(jù)值,這是由于在查詢間隔期間,該條數(shù)據(jù)被另一個(gè)事務(wù)修改并提交了。
幻讀和不可重復(fù)讀的區(qū)別:幻讀和不可重復(fù)讀都是讀取了另一個(gè)事務(wù)中已經(jīng)提交的數(shù)據(jù),不同的是不可重復(fù)讀查詢的都是同一個(gè)數(shù)據(jù)項(xiàng),而幻讀針對(duì)的是一個(gè)數(shù)據(jù)整體(例如,數(shù)據(jù)的條數(shù))。[考點(diǎn)]隔離級(jí)別
6.
在SQL標(biāo)準(zhǔn)中定義的4種隔離級(jí)別分別是什么?正確答案:在SQL標(biāo)準(zhǔn)中定義了4種隔離級(jí)別,每一種級(jí)別都規(guī)定了一個(gè)事務(wù)中所做的修改,哪些是在事務(wù)內(nèi)和事務(wù)間可見(jiàn)的,哪些是不可見(jiàn)的。較低級(jí)別的隔離通??梢詧?zhí)行更高的并發(fā),系統(tǒng)的開(kāi)銷也更低。SQL標(biāo)準(zhǔn)定義的4種隔離級(jí)別:ReadUncommitted(未提交讀)、ReadCommitted(提交讀)、RepeatableRead(可重復(fù)讀)、Serializable(可串行化),下面分別介紹。
(1)ReadUncommitted(未提交讀,讀取未提交內(nèi)容)
在該隔離級(jí)別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果,即在未提交讀級(jí)別,事務(wù)中的修改,即使沒(méi)有提交,對(duì)其他事務(wù)也都是可見(jiàn)的,該隔離級(jí)別很少用于實(shí)際。讀取未提交的數(shù)據(jù),也被稱為臟讀。該隔離級(jí)別最低,并發(fā)性能高。
(2)ReadlCommitted(提交讀,讀取提交內(nèi)容)
這是大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別。它滿足了隔離的簡(jiǎn)單定義:一個(gè)事務(wù)只能看見(jiàn)已經(jīng)提交事務(wù)所做的改變。換句話說(shuō),一個(gè)事務(wù)從開(kāi)始直到提交之前,所做的任何修改對(duì)其他事務(wù)都是不可見(jiàn)的。
(3)RepeatableRead(可重復(fù)讀)
可重復(fù)讀可以確保同一個(gè)事務(wù),在多次讀取同樣的數(shù)據(jù)的時(shí)候,得到同樣的結(jié)果??芍貜?fù)讀解決了臟讀的問(wèn)題,不過(guò)理論上,這會(huì)導(dǎo)致另一個(gè)棘手的問(wèn)題:幻讀。MySQL數(shù)據(jù)庫(kù)中的InnoDB和Falcon存儲(chǔ)引擎通過(guò)MVCC(Multi-VersionConcurrentControl,多版本并發(fā)控制)機(jī)制解決了該問(wèn)題。需要注意的是,多版本只是解決不可重復(fù)讀問(wèn)題,而加上間隙鎖(也就是它這里所謂的并發(fā)控制)才解決了幻讀問(wèn)題。
(4)Serializable(可串行化、序列化)
這是最高的隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序,強(qiáng)制事務(wù)串行執(zhí)行,使之不可能相互沖突,從而解決幻讀問(wèn)題。簡(jiǎn)言之,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。實(shí)際應(yīng)用中也很少用到這個(gè)隔離級(jí)別,只有在非常需要確保數(shù)據(jù)的一致性而且可以接受沒(méi)有并發(fā)的情況下,才考慮用該級(jí)別。這是花費(fèi)代價(jià)最高但是最可靠的事務(wù)隔離級(jí)別。隔離級(jí)別ReadUncommittedReadCommittedRepeatableReadSerializable簡(jiǎn)介在該隔離級(jí)別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果,即在未提交讀級(jí)別,事務(wù)中的修改,即使沒(méi)有提交,對(duì)其他事務(wù)也都是可見(jiàn)的,該隔離級(jí)別很少用于實(shí)際。讀取未提交的數(shù)據(jù),也被稱為臟讀。該隔離級(jí)別最低,并發(fā)性能高這是大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別。它滿足了隔離的簡(jiǎn)單定義:一個(gè)事務(wù)只能看見(jiàn)已經(jīng)提交事務(wù)所做的改變。換句話說(shuō),一個(gè)事務(wù)從開(kāi)始直到提交之前,所做的任何修改對(duì)其他事務(wù)都是不可見(jiàn)的。提交讀是Oracle數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別可重復(fù)讀可以確保同一個(gè)事務(wù),在多次讀取同樣的數(shù)據(jù)的時(shí)候,得到同樣的結(jié)果。可重復(fù)讀解決了臟讀的問(wèn)題,不過(guò)理論上,這會(huì)導(dǎo)致另一個(gè)棘手的問(wèn)題:幻讀。MySQL數(shù)據(jù)庫(kù)中的InnoDB和Falcon存儲(chǔ)引擎通過(guò)MVCC(多版本并發(fā)控制)機(jī)制解決了該問(wèn)題。需要注意的是,多版本只是解決不可重復(fù)讀問(wèn)題,而加上間隙鎖(也就是所謂的并發(fā)控制)才解決了幻讀問(wèn)題??芍貜?fù)讀是MySQL數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別這是最高的隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序,強(qiáng)制事務(wù)串行執(zhí)行,使之不可能相互沖突,從而解決幻讀問(wèn)題。簡(jiǎn)言之,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。實(shí)際應(yīng)用中也很少用到這個(gè)隔離級(jí)別,只有在非常需要確保數(shù)據(jù)的一致性而且可以接受沒(méi)有并發(fā)的情況下,才考慮用該級(jí)別。這是花費(fèi)代價(jià)最高但是最可靠的事務(wù)隔離級(jí)別臟讀允許
不可重復(fù)讀允許允許
幻讀允許允許允許
默認(rèn)級(jí)別數(shù)據(jù)庫(kù)
Oracle、SQLServerMySQL
并發(fā)性能最高比ReadUncommitted低比ReadCommitted低最低
不同的隔離級(jí)別有不同的現(xiàn)象,并有不同的鎖和并發(fā)機(jī)制,隔離級(jí)別越高,數(shù)據(jù)庫(kù)的并發(fā)性能就越差,4種事隔離級(jí)別與并發(fā)性能的關(guān)系如下圖所示。
[考點(diǎn)]隔離級(jí)別
7.
什么是CAP定理?正確答案:CAP定理又稱CAP原則,它是一個(gè)衡量系統(tǒng)設(shè)計(jì)的準(zhǔn)則。CAP定理指的是在一個(gè)分布式系統(tǒng)中,Consistency(一致性)、Availability(可用性)、PanitionTolerance(分區(qū)容錯(cuò)性),三者不可兼得。
1)C(一致性):所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致。
2)A(可用性):服務(wù)一直可用,每個(gè)請(qǐng)求都能接收到一個(gè)響應(yīng),無(wú)論響應(yīng)成功或失敗。
3)P(分區(qū)容錯(cuò)性):分布式系統(tǒng)在遇到某節(jié)點(diǎn)或網(wǎng)絡(luò)分區(qū)故障的時(shí)候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。
任何分布式系統(tǒng)在可用性、一致性、分區(qū)容錯(cuò)性方面,不能兼得,最多只能得其二。因此,任何分布式系統(tǒng)的設(shè)計(jì)只是在三者中的不同取舍而已。所以,就有了3個(gè)分類:CA數(shù)據(jù)庫(kù)、CP數(shù)據(jù)庫(kù)和AP數(shù)據(jù)庫(kù)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在功能支持上通常很寬泛,從簡(jiǎn)單的鍵值查詢,到復(fù)雜的多表聯(lián)合查詢,再到事務(wù)機(jī)制的支持。而與之不同的是,NoSQL系統(tǒng)通常注重性能和擴(kuò)展性,而非事務(wù)機(jī)制,因?yàn)槭聞?wù)就是強(qiáng)一致性的體現(xiàn)。
1)CA數(shù)據(jù)庫(kù)滿足數(shù)據(jù)的一致性和高可用性,但沒(méi)有可擴(kuò)展性,不考慮分區(qū)容忍性,對(duì)應(yīng)的數(shù)據(jù)庫(kù)就是普通的關(guān)系型數(shù)據(jù)庫(kù)RDBMS,例如Oracle、MySQL的單節(jié)點(diǎn),滿足數(shù)據(jù)的一致性和高可用性。單點(diǎn)數(shù)據(jù)庫(kù)是符合這種架構(gòu)的,例如超市收銀系統(tǒng)、圖書管理系統(tǒng)。
2)CP數(shù)據(jù)庫(kù)考慮的是一致性和分區(qū)容錯(cuò)性,這種數(shù)據(jù)庫(kù)對(duì)分布式系統(tǒng)內(nèi)的通信要求比較高,因?yàn)橐3謹(jǐn)?shù)據(jù)的一致性,需要做大量的交互,例如OracleRAC、Sybase集群。雖然OracleRAC具備一點(diǎn)的擴(kuò)展性,但當(dāng)節(jié)點(diǎn)達(dá)到一定數(shù)目時(shí),性能(即可用性)就會(huì)下降很快,并且節(jié)點(diǎn)之間的網(wǎng)絡(luò)開(kāi)銷還在,需要實(shí)時(shí)同步各節(jié)點(diǎn)之間的數(shù)據(jù)。CP數(shù)據(jù)庫(kù)通常性能不是特別高,例如火車售票系統(tǒng)。
3)AP數(shù)據(jù)庫(kù)考慮的是實(shí)用性和分區(qū)容忍性,即外部訪問(wèn)數(shù)據(jù),可以更快地得到回應(yīng),例如博客系統(tǒng)。這時(shí)候,數(shù)據(jù)的一致性就可能得不到滿足或者對(duì)一致性要求低一些,各節(jié)點(diǎn)之間的數(shù)據(jù)同步?jīng)]有那么快,但能保證數(shù)據(jù)的最終一致性。比如一個(gè)數(shù)據(jù),可能外部一個(gè)進(jìn)程在改寫這個(gè)數(shù)據(jù),同時(shí)另一個(gè)進(jìn)程在讀這個(gè)數(shù)據(jù),此時(shí),數(shù)據(jù)顯現(xiàn)是不一致的。但是有一點(diǎn),就是數(shù)據(jù)庫(kù)會(huì)滿足最終一致性的概念,即過(guò)程可能是不一致的,但是到某一個(gè)終點(diǎn),數(shù)據(jù)就會(huì)一致起來(lái)。當(dāng)前熱炒的NoSQL大多數(shù)是典型的AP類型數(shù)據(jù)庫(kù)。[考點(diǎn)]CAP定理
8.
CAP定理和一般事務(wù)中的ACID特性中的一致性有什么區(qū)別?正確答案:一般事務(wù)的ACID中的一致性是有關(guān)數(shù)據(jù)庫(kù)規(guī)則的描述,如果數(shù)據(jù)表結(jié)構(gòu)定義一個(gè)字段值是唯一的,那么一致性系統(tǒng)將解決所有操作中導(dǎo)致這個(gè)字段值非唯一性的情況,如果帶有一個(gè)外鍵的一行記錄被刪除,那么其外鍵相關(guān)記錄也應(yīng)該被刪除,這就是ACID一致性的含義。
CAP理論的一致性是保證同一個(gè)數(shù)據(jù)在所有不同服務(wù)器上的拷貝都是相同的,這是一種邏輯保證,而不是物理上的,因?yàn)榫W(wǎng)絡(luò)速度限制,在不同服務(wù)器上這種復(fù)制是需要時(shí)間的,集群通過(guò)阻止客戶端查看不同節(jié)點(diǎn)上還未同步的數(shù)據(jù)維持邏輯視圖。[考點(diǎn)]CAP定理
9.
什么是數(shù)據(jù)庫(kù)三級(jí)封鎖協(xié)議?正確答案:眾所周知,基本的封鎖類型有兩種:排它鎖(X鎖)和共享鎖(S鎖)。所謂X鎖是事務(wù)T對(duì)數(shù)據(jù)A加上X鎖時(shí),只允許事務(wù)T讀取和修改數(shù)據(jù)A。所謂S鎖是事務(wù)T對(duì)數(shù)據(jù)A加上S鎖時(shí),其他事務(wù)只能再對(duì)數(shù)據(jù)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的S鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了S鎖,則T就可以對(duì)A進(jìn)行讀取,但不能進(jìn)行更新(S鎖因此又稱為讀鎖),在T釋放A上的S鎖以前,其他事務(wù)可以再對(duì)A加S鎖,但不能加X(jué)鎖。從而可以讀取A,但不能更新A。
在運(yùn)用X鎖和S鎖對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,例如,何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等,稱這些規(guī)則為封鎖協(xié)議(LockingProtocol)。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。一般使用三級(jí)封鎖協(xié)議,也稱為三級(jí)加鎖協(xié)議。該協(xié)議是為了保證正確的調(diào)度事務(wù)的并發(fā)操作。三級(jí)加鎖協(xié)議是事務(wù)在對(duì)數(shù)據(jù)庫(kù)對(duì)象加鎖、解鎖時(shí)必須遵守的一種規(guī)則。下面分別介紹這三級(jí)封鎖協(xié)議。
一級(jí)封鎖協(xié)議:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)。一級(jí)封鎖協(xié)議可以防止丟失修改,并保證事務(wù)T是可恢復(fù)的。使用一級(jí)封鎖協(xié)議可以解決丟失修改問(wèn)題,在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)而不對(duì)其進(jìn)行修改,是不需要加鎖的,它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。
二級(jí)封鎖協(xié)議:一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后方可釋放S鎖。二級(jí)封鎖協(xié)議除防止了丟失修改,還可以進(jìn)一步防止讀“臟”數(shù)據(jù)。但在二級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。
三級(jí)封鎖協(xié)議:一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。三級(jí)封鎖協(xié)議除防止了丟失修改和不讀“臟”數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。[考點(diǎn)]數(shù)據(jù)庫(kù)三級(jí)封鎖協(xié)議和兩段鎖協(xié)議
10.
什么是兩段鎖協(xié)議?正確答案:兩段鎖協(xié)議是指所有事務(wù)必須嚴(yán)格分為兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)進(jìn)行加鎖和解鎖的操作,第一階段必須為加鎖,第二階段必須為解鎖。一個(gè)事務(wù)中一旦開(kāi)始釋放鎖,就不能再申請(qǐng)新鎖了。兩段鎖協(xié)議的目的是保證并發(fā)調(diào)度的正確性。也就是說(shuō),如果所有操作數(shù)據(jù)庫(kù)的事務(wù)都滿足兩段鎖協(xié)議,那么這些事務(wù)的任何并發(fā)調(diào)度策略是可串行性的。
1)在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖。
2)每個(gè)事務(wù)中,所有的加鎖請(qǐng)求先于所有的解鎖請(qǐng)求。
三級(jí)封鎖協(xié)議的目的是在不同程序上保證數(shù)據(jù)的一致性。三級(jí)封鎖協(xié)議是從鎖的隔離程度來(lái)定義,兩段鎖協(xié)議是從加鎖、解鎖順序(會(huì)影響事務(wù)的并發(fā)調(diào)度)的角度來(lái)描述。[考點(diǎn)]數(shù)據(jù)庫(kù)三級(jí)封鎖協(xié)議和兩段鎖協(xié)議
11.
什么是鎖?正確答案:鎖(Lock)機(jī)制用于管理對(duì)共享資源的并發(fā)訪問(wèn),用于多用戶的環(huán)境下,可以保證數(shù)據(jù)庫(kù)的完整性和一致性。以商場(chǎng)的試衣間為例,每個(gè)試衣間都可供多個(gè)消費(fèi)者使用,因此,可能出現(xiàn)多個(gè)消費(fèi)者同時(shí)需要使用試衣間試衣服。為了避免沖突,試衣間裝了鎖,某一個(gè)試衣服的人在試衣間里把鎖鎖住,其他顧客就不能再?gòu)耐饷娲蜷_(kāi)了,只能等待里面的顧客試完衣服,從里面把鎖打開(kāi),外面的人才能進(jìn)去。
當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)時(shí),在數(shù)據(jù)庫(kù)中就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況。若對(duì)并發(fā)操作不加控制,則就有可能會(huì)讀取和存儲(chǔ)到不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的完整性和一致性。當(dāng)事務(wù)在對(duì)某個(gè)數(shù)據(jù)對(duì)象進(jìn)行操作前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制。[考點(diǎn)]基本概念
12.
什么是更新丟失?正確答案:更新丟失是指多個(gè)用戶通過(guò)應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí),由于查詢數(shù)據(jù)并返回到頁(yè)面和用戶修改完畢單擊保存按鈕將修改后的結(jié)果保存到數(shù)據(jù)庫(kù)這個(gè)時(shí)間段(即修改數(shù)據(jù)在頁(yè)面上停留的時(shí)間)在不同用戶之間可能存在偏差,從而最先查詢數(shù)據(jù)并且最后提交數(shù)據(jù)的用戶會(huì)把其他用戶所做的修改覆蓋掉。當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行數(shù)據(jù),然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題。每個(gè)事務(wù)都不知道其他事務(wù)的存在。最后的更新將重寫由其他事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。
簡(jiǎn)單來(lái)說(shuō),更新丟失就是兩個(gè)事務(wù)都同時(shí)更新一行數(shù)據(jù),一個(gè)事務(wù)對(duì)數(shù)據(jù)的更新把另一個(gè)事務(wù)對(duì)數(shù)據(jù)的更新覆蓋了。這是因?yàn)橄到y(tǒng)沒(méi)有執(zhí)行任何的鎖操作,因此并發(fā)事務(wù)并沒(méi)有被隔離開(kāi)來(lái)。Serializable可以防止更新丟失問(wèn)題的發(fā)生。其他的三個(gè)隔離級(jí)別都有可能發(fā)生更新丟失問(wèn)題。Serializable雖然可以防止更新丟失,但是效率太低,通常數(shù)據(jù)庫(kù)不會(huì)用這個(gè)隔離級(jí)別,所以,需要其他的機(jī)制來(lái)防止更新丟失,例如悲觀鎖和樂(lè)觀鎖。[考點(diǎn)]基本概念
13.
更新丟失可以分為哪幾類?正確答案:更新丟失可以分為以下兩類。
第一類丟失更新:在A事務(wù)撤銷時(shí),把已經(jīng)提交的B事務(wù)的更新數(shù)據(jù)覆蓋了。這種錯(cuò)誤可能造成很嚴(yán)重的問(wèn)題,通過(guò)下面的賬戶取款轉(zhuǎn)賬實(shí)例就可以看出來(lái)。時(shí)間取款事務(wù)A轉(zhuǎn)賬事務(wù)BT1開(kāi)始事務(wù)
T2
開(kāi)始事務(wù)T3查詢賬戶余額為1000元
T4
查詢賬戶余額為1000元T5
匯入100元把余額改為1100元T6
提交事務(wù)T7取出100元把余額改為900元
T8撤銷事務(wù)
T9余額恢復(fù)為1000元(丟失更新)
A事務(wù)在撤銷時(shí),“不小心”將B事務(wù)已經(jīng)轉(zhuǎn)入賬戶的金額給抹去了。第二類丟失更新:在A事務(wù)提交時(shí)覆蓋了B事務(wù)已經(jīng)提交的數(shù)據(jù),造成B事務(wù)所做操作丟失。時(shí)間轉(zhuǎn)賬事務(wù)A取款事務(wù)BT1
開(kāi)始事務(wù)T2開(kāi)始事務(wù)
T3
查詢賬戶余額為1000元T4查詢賬戶余額為1000元
T5
取出100元把余額改為900元T6
提交事務(wù)T7匯入100元
T8提交事務(wù)
T9把余額改為1100元(丟失更新)
上面的例子里由于支票轉(zhuǎn)賬事務(wù)覆蓋了取款事務(wù)對(duì)存款余額所做的更新,導(dǎo)致銀行最后損失了100元;相反,如果轉(zhuǎn)賬事務(wù)先提交,那么用戶賬戶將損失100元。[考點(diǎn)]基本概念
14.
什么是樂(lè)觀鎖和悲觀鎖?正確答案:各種大型數(shù)據(jù)庫(kù)所采用的鎖的基本理論是一致的,但在具體實(shí)現(xiàn)上各有差別。樂(lè)觀鎖和悲觀鎖不是數(shù)據(jù)庫(kù)中真正存在的鎖,只是人們?cè)诮鉀Q更新丟失時(shí)的不同的解決方案,體現(xiàn)的是人們看待事務(wù)的態(tài)度。下表列出了悲觀鎖和樂(lè)觀鎖及其更新丟失的解決方案。名稱悲觀鎖(PessimisticLcck)樂(lè)觀鎖(OptimisticLock)描述顧名思義,很悲觀。每次去讀數(shù)據(jù)的時(shí)候,都認(rèn)為別的事務(wù)會(huì)修改數(shù)據(jù),所以,每次在讀數(shù)據(jù)的時(shí)候都會(huì)上鎖,防止其他事務(wù)讀取或修改這些數(shù)據(jù),這樣導(dǎo)致其他事務(wù)會(huì)被阻塞,直到這個(gè)事務(wù)結(jié)束顧名思義,很樂(lè)觀。每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以,不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù)。樂(lè)觀鎖一般通過(guò)增加時(shí)間戳字段來(lái)實(shí)現(xiàn),認(rèn)為數(shù)據(jù)不會(huì)被其他用戶修改,所以,只需要修改屏幕上的信息而不需要鎖應(yīng)用場(chǎng)數(shù)據(jù)更新比較頻繁的場(chǎng)合數(shù)據(jù)更新不頻繁、查詢比較多的場(chǎng)合,這樣可以提高吞吐量更新丟失解決方案試圖在更新之前把行鎖住,使用SELECT...FORUPDATE,然后更新數(shù)據(jù)1)使用版本列的樂(lè)觀鎖定增加NUMBER、TIMESTAMP或DATE列,通過(guò)增加一個(gè)時(shí)間戳列,可以知道最后修改時(shí)間。每次修改行時(shí),檢查數(shù)據(jù)庫(kù)中這一列的值與最初讀出的值是否匹配。若匹配則修改數(shù)據(jù)且通過(guò)觸發(fā)器來(lái)負(fù)責(zé)遞增NUMBER、DATE、TIMESTAMP2)使用校驗(yàn)和的樂(lè)觀鎖定用基數(shù)據(jù)本身來(lái)計(jì)算一個(gè)“虛擬的”版本列,生成散列值進(jìn)行比較。數(shù)據(jù)庫(kù)獨(dú)立性好,從CPU使用和網(wǎng)絡(luò)傳輸方面來(lái)看,資源開(kāi)銷量大3)使用ORA_ROWSCN的樂(lè)觀鎖定建立在OracleSCN的基礎(chǔ)上,在建表時(shí),需要啟用ROWDEPENDENCIES,防止整個(gè)數(shù)據(jù)塊的ORA_ROWSCN向前推進(jìn)。可以用SCN_TOTIMESTAMP(ORA_ROWSCN)將SCN轉(zhuǎn)換為時(shí)間格式。將原先的悲觀鎖機(jī)制修改為樂(lè)觀鎖來(lái)控制并發(fā),可以使用ORA_ROWSCN,這樣可以無(wú)須增加新列。也可以通過(guò)SCN_TO_TIMESTAMP來(lái)獲取最后修改時(shí)間[考點(diǎn)]基本概念
15.
數(shù)據(jù)庫(kù)以及線程發(fā)生死鎖的原理是什么?正確答案:所謂死鎖指的是兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,如果無(wú)外力作用,那么它們都將無(wú)法推進(jìn)下去。此時(shí),稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。舉一個(gè)簡(jiǎn)單例子加以說(shuō)明死鎖,人多好辦事,在程序里面也是如此,如果一個(gè)程序需要并行處理多個(gè)任務(wù),那么就可以創(chuàng)建多個(gè)線程,但是線程多了,往往會(huì)產(chǎn)生沖突,當(dāng)一個(gè)線程鎖定了一個(gè)資源A,又想去鎖定資源B,而在另一個(gè)線程中,鎖定了資源B,又想去鎖定資源A以完成自身的操作,兩個(gè)線程都想得到對(duì)方的資源,不愿釋放自己的資源,造成兩個(gè)線程都在等待,而無(wú)法執(zhí)行,此時(shí)就是死鎖。[考點(diǎn)]基本概念
16.
產(chǎn)生死鎖的原因有哪些?正確答案:產(chǎn)生死鎖的原因主要有以下3個(gè)方面:①系統(tǒng)資源不足;②進(jìn)程運(yùn)行推進(jìn)的順序不合適;③資源分配不當(dāng)。如果系統(tǒng)資源充足,進(jìn)程的資源請(qǐng)求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則,就會(huì)因爭(zhēng)奪有限的資源而陷入死鎖。其次,進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。[考點(diǎn)]基本概念
17.
什么是活鎖?什么是死鎖?正確答案:如果事務(wù)T1封鎖了數(shù)據(jù)R,事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T2的清求,T3仍然等待。然后T1又請(qǐng)求封鎖R,當(dāng)T2釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T3的請(qǐng)求……T1有可能永遠(yuǎn)等待,這就是活鎖的情形?;铈i的含義是該等待事務(wù)等待時(shí)間太長(zhǎng),似乎被鎖住了,實(shí)際上可能被激活。如果事務(wù)T1封鎖了數(shù)據(jù)R1,T2封鎖了數(shù)據(jù)R2,然后T1又請(qǐng)求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放。R2上的鎖。接著T2又申請(qǐng)封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。這樣就出現(xiàn)了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。[考點(diǎn)]基本概念
18.
試述活鎖的產(chǎn)生原因和解決方法。正確答案:活鎖產(chǎn)生的原因:當(dāng)一系列封鎖不能按照其先后順序執(zhí)行時(shí),就可能導(dǎo)致一些事務(wù)無(wú)限期等待某個(gè)封鎖,從而導(dǎo)致活鎖。避免活鎖的簡(jiǎn)單方法是采用先來(lái)先服務(wù)的策略。當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí),封鎖子系統(tǒng)按請(qǐng)求封鎖的先后次序?qū)κ聞?wù)排隊(duì),數(shù)據(jù)對(duì)象上的鎖一旦釋放就批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖。[考點(diǎn)]基本概念
19.
MVCC的含義是什么?正確答案:在多用戶的系統(tǒng)里,假設(shè)有多個(gè)用戶同時(shí)讀寫數(shù)據(jù)庫(kù)里的一行記錄,那么怎么保證數(shù)據(jù)的一致性呢?一種基本的解決方法是對(duì)這一行記錄加上一把鎖,將不同用戶對(duì)同一行記錄的讀寫操作完全串行化執(zhí)行,由于同一時(shí)刻只有一個(gè)用戶在操作,因此一致性不存在問(wèn)題。但是,它存在明顯的性能問(wèn)題:讀會(huì)阻塞寫,寫也會(huì)阻塞讀,整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的并發(fā)性能將大打折扣。
MVCC(Multi-VersionConcurrentControl,多版本并發(fā)控制)的目標(biāo)是在保證數(shù)據(jù)一致性的前提下,提供一種高并發(fā)的訪問(wèn)性能。在MVCC協(xié)議中,每個(gè)用戶在連接數(shù)據(jù)庫(kù)時(shí)看到的是一個(gè)具有一致性狀態(tài)的鏡像,每個(gè)事務(wù)在提交到數(shù)據(jù)庫(kù)之前對(duì)其他用戶均是不可見(jiàn)的。當(dāng)事務(wù)需要更新數(shù)據(jù)時(shí),不會(huì)直接覆蓋以前的數(shù)據(jù),而是生成一個(gè)新的版本的數(shù)據(jù),因此一條數(shù)據(jù)會(huì)有多個(gè)版本存儲(chǔ),但是同一時(shí)刻只有最新的版本號(hào)是有效的。因此,讀的時(shí)候就可以保證總是以當(dāng)前時(shí)刻的版本的數(shù)據(jù)可以被讀到,不論這條數(shù)據(jù)后來(lái)是否被修改或刪除。
大多數(shù)的MySQL事務(wù)型存儲(chǔ)引擎,例如InnoDB、Falcon以及PBXT都不使用簡(jiǎn)單的行鎖機(jī)制,它們都和MVCC機(jī)制來(lái)一起使用。MVCC不只使用在MySQL中,Oracle、PostgreSQL以及其他一些數(shù)據(jù)庫(kù)系統(tǒng)也同樣使用它。
可以將MVCC看成行級(jí)鎖的一種妥協(xié),它在許多情況下避免了使用鎖,同時(shí)可以提供更小的開(kāi)銷。根據(jù)實(shí)現(xiàn)的不同,它可以允許非阻塞讀,在寫操作進(jìn)行時(shí),只鎖定需要的記錄。MVCC會(huì)保存某個(gè)時(shí)間點(diǎn)上的數(shù)據(jù)快照,這意味著事務(wù)可以看到一個(gè)一致的數(shù)據(jù)視圖,而不管它們需要運(yùn)行多久。這同時(shí)也意味著不同的事務(wù)在同一個(gè)時(shí)間點(diǎn)看到的同一個(gè)表的數(shù)據(jù)可能是不同的。
使用MVCC多版本并發(fā)控制相比鎖定模型的主要優(yōu)點(diǎn)是,在MVCC里,對(duì)檢索(讀)數(shù)據(jù)的鎖要求與寫數(shù)據(jù)的鎖要求不沖突,所以,讀不會(huì)阻塞寫,而寫也從不阻塞讀。在數(shù)據(jù)庫(kù)里也有表和行級(jí)別的鎖定機(jī)制,用于給那些無(wú)法輕松接受MVCC行為的應(yīng)用。不過(guò),恰當(dāng)?shù)厥褂肕VCC總會(huì)提供比鎖更好的性能。
20.
什么是存儲(chǔ)過(guò)程?正確答案:存儲(chǔ)過(guò)程是用戶定義的一系列sOL語(yǔ)句的集合,涉及特定表或其他對(duì)象的任務(wù),用戶可以調(diào)用存儲(chǔ)過(guò)程,而函數(shù)通常是數(shù)據(jù)庫(kù)已定義的方法,它接收參數(shù)并返回某種類型的值,并且不涉及特定用戶表。
存儲(chǔ)過(guò)程用于執(zhí)行特定的操作,可以接收輸入?yún)?shù)、輸出參數(shù),返回單個(gè)或多個(gè)結(jié)果集。在創(chuàng)建存儲(chǔ)過(guò)程時(shí),既可以指定輸入?yún)?shù)(IN),也可以指定輸出參數(shù)(OUT),通過(guò)在存儲(chǔ)過(guò)程中使用輸入?yún)?shù),可以將數(shù)據(jù)傳遞到執(zhí)行部分;通過(guò)使用輸出參數(shù),可以將執(zhí)行結(jié)果傳遞到應(yīng)用環(huán)境。存儲(chǔ)過(guò)程可以使對(duì)數(shù)據(jù)庫(kù)的管理、顯示數(shù)據(jù)庫(kù)及其用戶信息的工作更加容易。[考點(diǎn)]存儲(chǔ)過(guò)程
21.
存儲(chǔ)過(guò)程有哪些優(yōu)點(diǎn)?正確答案:存儲(chǔ)過(guò)程存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi),可由應(yīng)用程序調(diào)用執(zhí)行。存儲(chǔ)過(guò)程允許用戶聲明變量并且可包含程序流、邏輯以及對(duì)數(shù)據(jù)庫(kù)的查詢。具體而言,存儲(chǔ)過(guò)程的優(yōu)點(diǎn)如下:
1)存儲(chǔ)過(guò)程增強(qiáng)了SQL語(yǔ)言的功能和靈活性。存儲(chǔ)過(guò)程可以用流控制語(yǔ)句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和運(yùn)算。
2)存儲(chǔ)過(guò)程可保證數(shù)據(jù)的安全性。
3)通過(guò)存儲(chǔ)過(guò)程可以使相關(guān)的動(dòng)作在一起發(fā)生,從而維護(hù)數(shù)據(jù)庫(kù)的完整性。
4)在運(yùn)行存儲(chǔ)過(guò)程前,數(shù)據(jù)庫(kù)已對(duì)其進(jìn)行了語(yǔ)法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過(guò)程可極大地改善SQL語(yǔ)句的性能。
5)可以降低網(wǎng)絡(luò)的通信量,因?yàn)椴恍枰ㄟ^(guò)網(wǎng)絡(luò)來(lái)傳送很多SQL語(yǔ)句到數(shù)據(jù)庫(kù)服務(wù)器。
6)把體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入數(shù)據(jù)庫(kù)服務(wù)器中,以便集中控制。[考點(diǎn)]存儲(chǔ)過(guò)程
22.
有如下兩張表:
1)用戶資料表:SERV(SERV_lDNUMBER(10),PROD_IDNUMBER(L0),USER_TYPEVARCHAR2(30),TERMINAL_NAMEvARCHAR2(30)),其中,SERV_ID為用戶標(biāo)識(shí),是SERV表的主鍵;PROD_ID為產(chǎn)品標(biāo)識(shí);USER_TYPE為用戶類型;TERMINAL_NAME為終端類型。
2)終端類型臨時(shí)表:TERMINAL(SERV_IDNUMBER(10),TERMINAL_NAMEVARCHAR2(30))。
在初始化情況下,SERV表的SERV_ID、PROD_ID、USER_TYPE字段值是己知的,TERMINAL_NAME字段是空的,現(xiàn)在要根據(jù):PROD_ID、USER_TYPE字段的值來(lái)更新NAME字段。
更新條件為:
1)當(dāng)條件滿足“PROD_ID=1ANDUSER_TYPE='A'”時(shí),TERMINAL_NAME更新為“固話”。
2)當(dāng)條件滿足“PROD_ID=1ANDUSER_TYPD='B'”時(shí),TERMINAL_NAME更新為“小靈通”。
3)當(dāng)條件滿足“PROD_ID=2”時(shí),TERMINAL_NAME更新為“寬帶”。
4)當(dāng)條件滿足“USER_TYPE='C'”時(shí),TERMINAL_NAME更新為“CDMA”。
5)以上條件均不滿足時(shí),TERMINAL_NAME更新為“-1”。
根據(jù)以上條件,完成存儲(chǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版煤炭物流運(yùn)輸新能源車輛采購(gòu)合同4篇
- 二零二五年度養(yǎng)殖場(chǎng)承包運(yùn)營(yíng)管理協(xié)議3篇
- 龍湖地產(chǎn)龍湖一期土石方工程二零二五年度質(zhì)量保證合同4篇
- 2025年度個(gè)人對(duì)公司養(yǎng)老產(chǎn)業(yè)借款合同(養(yǎng)老產(chǎn)業(yè)發(fā)展支持版)2篇
- 2024藥店藥品追溯系統(tǒng)建設(shè)及運(yùn)營(yíng)服務(wù)合同范本3篇
- 2025年度內(nèi)墻涂料施工與綠色建筑認(rèn)證合同
- 2025年退休人員創(chuàng)業(yè)扶持勞動(dòng)合同規(guī)范
- 二零二五年度內(nèi)蒙古自治區(qū)肉牛良種引進(jìn)與推廣合同
- 中小微企業(yè)2024合作創(chuàng)新發(fā)展合同稿版B版
- 2025年二零二五年度跨境電商進(jìn)口商品買賣合同標(biāo)的約定2篇
- 物業(yè)民法典知識(shí)培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識(shí)點(diǎn)詳解
- 2024-2025學(xué)年八年級(jí)數(shù)學(xué)人教版上冊(cè)寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《萬(wàn)方數(shù)據(jù)資源介紹》課件
- 醫(yī)生定期考核簡(jiǎn)易程序述職報(bào)告范文(10篇)
- 第一章-地震工程學(xué)概論
- 《中國(guó)糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- 交通運(yùn)輸類專業(yè)生涯發(fā)展展示
- 2024年山東省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 神經(jīng)重癥氣管切開(kāi)患者氣道功能康復(fù)與管理專家共識(shí)(2024)解讀
- 2025年九省聯(lián)考新高考 政治試卷(含答案解析)
評(píng)論
0/150
提交評(píng)論