版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Good is good, but better carries it.精益求精,善益求善。SQLServer2008數(shù)據(jù)庫(kù)創(chuàng)建過(guò)程和可配置選項(xiàng)HYPERLINK/xupengnannan20070617/archive/2012/08/26/2655681.htmlSQLServer2008數(shù)據(jù)庫(kù)創(chuàng)建過(guò)程和可配置選項(xiàng)系統(tǒng)數(shù)據(jù)庫(kù)在安裝SQLServer2008時(shí),創(chuàng)建了5個(gè)系統(tǒng)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)系統(tǒng)信息和支持?jǐn)?shù)據(jù)庫(kù)操作。在普通的數(shù)據(jù)庫(kù)操作中,我們可以看到四個(gè)系統(tǒng)數(shù)據(jù)庫(kù)master、modle、msdb、tempdb,但是看不到第五個(gè)Resource數(shù)據(jù)庫(kù)。如果SQLServer實(shí)例被配置為用于SQL
2、Server復(fù)制的分發(fā)服務(wù)器,就可以創(chuàng)建分發(fā)數(shù)據(jù)庫(kù)。用戶數(shù)據(jù)庫(kù)用戶數(shù)據(jù)庫(kù)是由具有適當(dāng)權(quán)限的任意服務(wù)器登錄名創(chuàng)建。數(shù)據(jù)庫(kù)規(guī)劃數(shù)據(jù)庫(kù)管理員應(yīng)該考慮為什么數(shù)據(jù)庫(kù)像現(xiàn)在這樣運(yùn)行和如何運(yùn)行。管理數(shù)據(jù)庫(kù)最好時(shí)機(jī)是在安裝之前。無(wú)論是內(nèi)部開(kāi)發(fā)還是從軟件供應(yīng)商那里購(gòu)買(mǎi)數(shù)據(jù)應(yīng)用程序,數(shù)據(jù)庫(kù)管理員都必須深入規(guī)劃和創(chuàng)建支持?jǐn)?shù)據(jù)庫(kù)。規(guī)劃一個(gè)數(shù)據(jù)庫(kù)時(shí)必須決定的第一件事是需要多大的磁盤(pán)空間來(lái)支持該數(shù)據(jù)庫(kù)。一個(gè)比較有效和現(xiàn)實(shí)的方法是先取得數(shù)據(jù)庫(kù)原型(數(shù)據(jù)庫(kù)的測(cè)試或開(kāi)發(fā)版本),然后在其中填充適量的測(cè)試數(shù)據(jù)。之后,價(jià)差磁盤(pán)上數(shù)據(jù)文件的大小,然后將其乘以1.5.其結(jié)果應(yīng)該足夠容納新數(shù)據(jù)庫(kù)的初始數(shù)據(jù)量,而且還會(huì)有空間剩余。一旦數(shù)據(jù)庫(kù)
3、投入生產(chǎn)環(huán)境,監(jiān)控?cái)?shù)據(jù)庫(kù)文件大小就相當(dāng)重要,因?yàn)檫@樣可以分析增長(zhǎng)趨勢(shì)。例如可以配置為當(dāng)數(shù)據(jù)庫(kù)中填充的數(shù)據(jù)量達(dá)到75%是發(fā)出警報(bào),這樣可以在需要時(shí)增加文件的大小,但同時(shí)又能以足夠的百分比在增長(zhǎng)他們,從而避免經(jīng)常執(zhí)行增長(zhǎng)。規(guī)劃事務(wù)日志文件的大小更加復(fù)雜。要想精確地規(guī)劃日志大小,必須知道數(shù)據(jù)庫(kù)中執(zhí)行的事務(wù)的平均大小、發(fā)生的頻率以及被修改的表的物理結(jié)構(gòu)。創(chuàng)建數(shù)據(jù)庫(kù)新建數(shù)據(jù)庫(kù)時(shí)可使用命令CREATEDATABASESampleDB,但是這樣生成的數(shù)據(jù)庫(kù)文件在系統(tǒng)默認(rèn)的文件夾下,不推薦使用,可以使用圖形界面進(jìn)行創(chuàng)建。在新建數(shù)據(jù)庫(kù)界面中“所有者”字段的值為“”,這時(shí)創(chuàng)建數(shù)據(jù)庫(kù)時(shí)使用的登錄帳戶。這個(gè)帳戶一般是
4、Sa,這是一個(gè)內(nèi)置的SQLServer系統(tǒng)管理員帳戶。數(shù)據(jù)庫(kù)所有者應(yīng)該總是為Sa,這樣可以避免任何可能發(fā)生的問(wèn)題。HYPERLINK數(shù)據(jù)庫(kù)的所有者可以完全控制該數(shù)據(jù)庫(kù),要修改數(shù)據(jù)庫(kù)的所有權(quán),可以使用TSQL語(yǔ)句ALTERAUTHORIZATION指定任意的有效的登錄名,如:ALTERAUTHORIZATIONONDATABASE:SampleDBTOSA想要檢索數(shù)據(jù)庫(kù)信息有兩種不同的方法,sp_helpdb存儲(chǔ)過(guò)程可用于檢索所有數(shù)據(jù)庫(kù)或特定數(shù)據(jù)庫(kù)的信息,非常易于用作快速查看,要檢索所有數(shù)據(jù)庫(kù),執(zhí)行存儲(chǔ)過(guò)程時(shí)不使用參數(shù)。對(duì)于特定數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)名稱傳遞給該存儲(chǔ)過(guò)程,如:USERMasterGOE
5、XECsp_helpAdventureWorks2008還有一種檢索數(shù)據(jù)庫(kù)信息的方法是是使用目錄視圖,他們提供的信息比相應(yīng)的存儲(chǔ)過(guò)程多,且允許使用標(biāo)準(zhǔn)的TSQL命令,如WHERE和GROUPBY。如使用sys.database目錄視圖與sys.server_principals目錄視圖連接起來(lái),查看服務(wù)器上所有數(shù)據(jù)庫(kù)的基本信息:SELECTASdatabase_name,ASowner,db.create_date,patibility_level,db.recovery_model_descFROMsys.databasedbINNERJOINsys.server_principalsspO
6、Ndb.owner_sid=sp.sid數(shù)據(jù)庫(kù)文件在“新建數(shù)據(jù)庫(kù)”對(duì)話框中的“數(shù)據(jù)庫(kù)文件”部分中,第一個(gè)數(shù)據(jù)文件的邏輯名稱和第一個(gè)日志文件的邏輯名稱已經(jīng)被自動(dòng)命名,單擊對(duì)話框底部的“添加”按鈕,就會(huì)像數(shù)據(jù)庫(kù)文件中添加一個(gè)新的文件行,新的文件默認(rèn)類(lèi)型為“行數(shù)據(jù)”,也可以通過(guò)下拉列表中選擇“日志”或“行數(shù)據(jù)”,一旦創(chuàng)建好數(shù)據(jù)庫(kù),文件類(lèi)型不可改變。然后在文件組列中單擊下拉列表,選擇文件組文件組數(shù)據(jù)庫(kù)時(shí)基于組織在文件組中的文件創(chuàng)建的。文件組是用來(lái)存放為數(shù)據(jù)庫(kù)定義的所有數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)文件的邏輯分組。唯一必須的文件組是主文件組,主要由主數(shù)據(jù)文件和其他用戶定義的數(shù)據(jù)文件組成。主數(shù)據(jù)文件的作用是存儲(chǔ)針
7、對(duì)數(shù)據(jù)庫(kù)的所有系統(tǒng)引用,包括指向Resource數(shù)據(jù)庫(kù)中定義的對(duì)象的指針。如果作為默認(rèn)文件組,則主文件組包含用戶定義的對(duì)象以及系統(tǒng)創(chuàng)建的對(duì)象的所有對(duì)象定義。除了主文件組意外,還可以創(chuàng)建更多的用戶定義文件組。使用用戶定義文件組的一個(gè)最大好處是控制,如果沒(méi)有用戶定義文件組,那么所有數(shù)據(jù)都會(huì)存儲(chǔ)在主文件組中,這樣數(shù)據(jù)庫(kù)的靈活性和可擴(kuò)展性都大大削弱。輸入新文件組的名稱,選中“默認(rèn)值”復(fù)選框,HYPERLINK然后單擊“確定”按鈕,這會(huì)把新的用戶定義的文件組設(shè)置為默認(rèn)文件組,用戶創(chuàng)建的所有對(duì)象都會(huì)放在這個(gè)新的文件組中。這實(shí)際上就把系統(tǒng)數(shù)據(jù)和用戶數(shù)據(jù)分離開(kāi)來(lái),從而獲得對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)的更多控制。使用文件組的一
8、個(gè)不錯(cuò)的功能就是可以將該文件組中的數(shù)據(jù)標(biāo)記為“只讀”,方法是選擇“新建文件組”對(duì)話框中的“只讀”復(fù)選框。當(dāng)在一個(gè)數(shù)據(jù)庫(kù)中組織不同的對(duì)象時(shí),這個(gè)選項(xiàng)相當(dāng)有用,要改變的對(duì)象可以放在一個(gè)可更ixnd文件組中,而不會(huì)改變的對(duì)象放在一個(gè)只讀的文件組中,分離對(duì)象可以減少需要備份和還原的數(shù)據(jù)量,對(duì)于大型數(shù)據(jù)庫(kù)來(lái)說(shuō)是一個(gè)很有用的選項(xiàng)。文件組帶來(lái)的性能優(yōu)勢(shì)主要有三方面,第一個(gè)方面是可以并行讀寫(xiě),這時(shí)通過(guò)將數(shù)據(jù)文件分割到多個(gè)物理設(shè)備實(shí)現(xiàn)的。然后,如果把多個(gè)物理我呢間放到單個(gè)文件組中,可以可獲得同樣的性能;第二個(gè)方面則是將非聚集索引和大型對(duì)象數(shù)據(jù)溢出作為常規(guī)數(shù)據(jù)空間而保留的文件組,將非聚集索引與數(shù)據(jù)分離可以讓數(shù)據(jù)庫(kù)
9、引擎同時(shí)使用獨(dú)立的線程從索引中搜搜行位置和從表中檢索行,將不經(jīng)常訪問(wèn)的大型對(duì)象數(shù)據(jù)和事務(wù)密集的關(guān)系數(shù)據(jù)分離還可以提升一些實(shí)例中的掃描性能;第三個(gè)方面,也是最顯著的方面,是可以跨多個(gè)文件組物理分區(qū)大型表。選項(xiàng)在“新建數(shù)據(jù)庫(kù)”對(duì)話框中的左邊點(diǎn)擊“選項(xiàng)”按鈕,會(huì)看到各類(lèi)組織級(jí)別的選項(xiàng)ANSINULL默認(rèn)值:在CREATETABLE或ALTERTABLE操作中添加至表中的列是否允許空置,默認(rèn)值為False,也就是除非有顯示指定,否則添加的列不允許空值,可以手動(dòng)進(jìn)行設(shè)置-更改默認(rèn)值SETANSI_NULL_DELT_ONOFFSETANSI_NULL_DELT_ONON更改數(shù)據(jù)庫(kù)的選項(xiàng)值A(chǔ)LTERDAT
10、ABASEAdventureWorks2008SETANSI_NULL_DEFAULTOFFALTERDATABASEAdventureWorks2008SETANSI_NULL_DEFAULTONANSI警告已啟用:當(dāng)設(shè)置為T(mén)rue時(shí),只要聚合函數(shù)中出現(xiàn)空值,數(shù)據(jù)庫(kù)引擎就會(huì)發(fā)出警告,設(shè)定為False時(shí),則不會(huì)發(fā)出警告,可以在連接級(jí)別或者數(shù)據(jù)庫(kù)級(jí)別設(shè)置SETANSI_WARNINGSOFFSETANSI_WARNINGSONALTERDATABASEAdventureWorks2008SETANSI_WARNINGSOFFALTERDATABASEAdventureworks2008SETAN
11、SI_WARNINGSON算術(shù)終止啟用:當(dāng)設(shè)置為true的時(shí)候,任何語(yǔ)句或事務(wù)在遇到算術(shù)溢出或被零除錯(cuò)誤后都將終止,設(shè)定為False的時(shí)候,會(huì)發(fā)出一個(gè)警告,但不是終止語(yǔ)句。同樣可以在連接級(jí)別或者數(shù)據(jù)庫(kù)級(jí)別設(shè)置:SETARITHABORTOFFSETARITHABORTONALTERDATABASEAdventureworks2008SETARITHABORTOFFALTERDATABASEAdventureworks2008SETARITHABORTON自動(dòng)創(chuàng)建統(tǒng)計(jì)信息:設(shè)置為T(mén)rue的時(shí)候,數(shù)據(jù)庫(kù)引擎為那些JOIN操作的WHERE子句或ON子句中引用的、缺少統(tǒng)計(jì)信息的非索引列生成統(tǒng)計(jì)信息AL
12、TERDATABASEAdventureworks2008SETAUTO_CREATE_STATISTICSOFFALTERDATABASEAdventureworks2008SETAUTO_CREATE_STATISTICSON自動(dòng)更新統(tǒng)計(jì)信息:設(shè)置為T(mén)rue時(shí),數(shù)據(jù)庫(kù)引擎會(huì)自動(dòng)更新列的統(tǒng)計(jì)信息,從而保持最有效的查詢計(jì)劃,如果設(shè)置為False則需要數(shù)據(jù)庫(kù)管理員手動(dòng)更新統(tǒng)計(jì)信息ALTERDATABASEAdventureworks2008SETAUTO_UPDATE_STATISTICSOFFALTERDATABASEAdventureworks2008SETAUTO_UPDATE_STATI
13、STICSON自動(dòng)異步更新統(tǒng)計(jì)信息:設(shè)置為T(mén)rue時(shí),查詢中發(fā)現(xiàn)的國(guó)企統(tǒng)計(jì)信息將被更新,但發(fā)現(xiàn)這些國(guó)企統(tǒng)計(jì)信息時(shí)正在執(zhí)行的查詢不會(huì)等待新的統(tǒng)計(jì)信息,后續(xù)的查詢將會(huì)利用新的統(tǒng)計(jì)信息,當(dāng)設(shè)置為False的時(shí)候,只有統(tǒng)計(jì)信息更新之后才進(jìn)行查詢編譯:ALTERDATABASEAdventureworks2008SETAUTO_UPDATE_STATISTICS_ASYNCOFFALTERDATABASEAdventureworks2008SETAUTO_UPDATE_STATISTICS_ASYNCON默認(rèn)游標(biāo):游標(biāo)始終基于生命它的連接。當(dāng)設(shè)置為Global時(shí),制定了生命的游標(biāo)可被統(tǒng)一連接上執(zhí)行的任意
14、批處理、存儲(chǔ)過(guò)程和觸發(fā)器引用。如果設(shè)置為L(zhǎng)ocal,游標(biāo)只能在聲明了它的批處理、存儲(chǔ)過(guò)程或觸發(fā)器中引用ALTERDATABASEAdventureworks2008SETCURSOR_DEFAULTLOCALALTERDATABASEAdventureworks2008SETCURSOR_DEFAULTGLOBAL驗(yàn)證頁(yè):驗(yàn)證頁(yè)為數(shù)據(jù)庫(kù)管理員可以為寫(xiě)頁(yè)設(shè)定不同的選項(xiàng)。可用的選項(xiàng)包括Checksun,Torn_Page_Detection和None。對(duì)于性能來(lái)說(shuō)最好的選擇的None,但是此設(shè)置會(huì)使數(shù)據(jù)庫(kù)無(wú)法檢測(cè)到數(shù)據(jù)損壞。Checksun提供了最好的保證,無(wú)論是數(shù)據(jù)寫(xiě)操作還是寫(xiě)操作之后發(fā)生的對(duì)磁
15、盤(pán)數(shù)據(jù)的任意修改都會(huì)被校驗(yàn)和驗(yàn)證檢測(cè)到,但是會(huì)占用最多的CPU周期;Torn_Page_Detection選項(xiàng)是一種檢測(cè)損壞頁(yè)的低成本方法,但是只會(huì)檢測(cè)在寫(xiě)操作期間發(fā)生的頁(yè)損壞,推薦設(shè)置是ChecksunALTERDATABASEAdventureworks2008SETPAGE_VERITYNONEALTERDATABASEAdventureworks2008SETPAGE_VERITYTORN_PAGE_DETECTIONALTERDATABASEAdventureworks2008SETPAGE_VERITYCHECKSUM參數(shù)化:默認(rèn)情況下數(shù)據(jù)庫(kù)引擎將一些查詢參數(shù)化,這樣即使在WHER
16、E子句中定義了不同的值,創(chuàng)建并編譯的查詢計(jì)劃也可重用,如果設(shè)置為簡(jiǎn)單,SQLServer會(huì)決定參數(shù)化哪些查詢和不參數(shù)化哪些查詢;設(shè)置為強(qiáng)制時(shí),SQLServer會(huì)把所有可參數(shù)化的查詢參數(shù)化,而同樣的查詢會(huì)得到一個(gè)參數(shù)化查詢計(jì)劃。強(qiáng)制自動(dòng)參數(shù)化優(yōu)勢(shì)能改善性能,但是需要仔細(xì)監(jiān)控以確保它對(duì)性能沒(méi)有負(fù)面影響ALTERDATABASEAdventureworks2008SETPARAMETERIZATIONSIMPLEALTERDATABASEAdventureworks2008SETPARAMETERIZATIONFORCED允許帶引號(hào)的標(biāo)識(shí)符:默認(rèn)情況下SQLServer使用方括號(hào)來(lái)界定對(duì)象,只有在
17、對(duì)象名中包含嵌入的空格或保留字時(shí)才需要界定對(duì)象。ANSI標(biāo)準(zhǔn)定界符是雙引號(hào),下面的例子說(shuō)明了如何使用方括號(hào)和雙引號(hào)創(chuàng)建和引用一個(gè)包含嵌入空格的對(duì)象:USERAdventureworks2008GOCREATETABLESales.USACustomers(AccuNumberintIDENTITY(1,1)NOTNULL,LastNamevarchar(75)NOTNULL,FirstNamevarchar(75)NOTNULL)SELECFTAcctNumber,LastName,FirstNameFROMSales.USACustomersUSERAdventureworks2008GOC
18、REATETABLESales.USACustomers(AccuNumberintIDENTITY(1,1)NOTNULL,LastNamevarchar(75)NOTNULL,FirstNamevarchar(75)NOTNULL)SELECFTAcctNumber,LastName,FirstNameFROMSales.USACustomers當(dāng)“允許帶引號(hào)的標(biāo)識(shí)符”為T(mén)rue的時(shí)候,方括號(hào)和雙引號(hào)都可以使用,為False的時(shí)候,值有方括號(hào)定界符可以使用,要在連接級(jí)別或者數(shù)據(jù)庫(kù)級(jí)別進(jìn)行設(shè)置的時(shí)候如下SETQUOTED_IDENTIFIEROFFSETQUOTED_IDENTIFIERON
19、ALTERDATABASEAdventureworks2008SETQUOTED_IDENTIFIEROFFALTERDATABASEAdvetnureworks2008SETQUOTED_IDENTIFIERON遞歸觸發(fā)器已啟用:遞歸觸發(fā)器是一項(xiàng)高級(jí)編程技術(shù),它允許統(tǒng)一觸發(fā)器在同一事務(wù)中按順序執(zhí)行多次。當(dāng)設(shè)置為False是,這一操作時(shí)不允許的。ALTERDATABASEAdventureworks2008SETRECURSIVE_TRIGGERSOFFALTERDATABASEAdventureworks2008SETRECURSIVE_TRIGGERSON限制訪問(wèn):限制訪問(wèn)選項(xiàng)使數(shù)據(jù)庫(kù)管理
20、員可以把對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)限制為一組已定義的登錄名。該選項(xiàng)的默認(rèn)值是MULTI_USER,允許多個(gè)無(wú)權(quán)限的用戶訪問(wèn)數(shù)據(jù)庫(kù),此外還有兩個(gè)選項(xiàng)SINGLE_USER和RESTRICTED_USER,如果設(shè)置為SINGLE_USER,那么一次就只有一個(gè)用戶帳戶可以訪問(wèn)數(shù)據(jù)庫(kù),如果設(shè)置為RESTRICTED_USER,那么只有db_owner,dbcreator或者sysadmin的成員可以連接至數(shù)據(jù)庫(kù)。要在數(shù)據(jù)庫(kù)級(jí)別進(jìn)行設(shè)置,可以使用如下命令A(yù)LTERDATABASEAdventureworks2008SETMULTI_USERALTERDATABASEAdventureworks2008SETREST
21、RICTED_USERALTERDATABASEAdventureworks2008SETSINGLE_USER生成數(shù)據(jù)庫(kù)創(chuàng)建腳本幾乎每一個(gè)創(chuàng)建或修改數(shù)據(jù)庫(kù)對(duì)象的配置屏幕都包括腳本操作選項(xiàng)。單擊“腳本”按鈕可用的腳本操作選項(xiàng)會(huì)顯示,單擊任何腳本操作都將生成一個(gè)腳本,腳本復(fù)制您在圖形化界面中指定的所有設(shè)置。然后通過(guò)這個(gè)腳本,可以使用同樣的選項(xiàng)創(chuàng)建新的數(shù)據(jù)庫(kù),值需要改變數(shù)據(jù)庫(kù)和相關(guān)文件的邏輯及物理名稱即可。另外一種重用腳本的方法是使用變量替代對(duì)象和文件的實(shí)際名稱,接下來(lái)只需要更新變量值并執(zhí)行腳本,創(chuàng)建數(shù)據(jù)定義語(yǔ)言DataDefinitionLanguageDDL腳本時(shí)唯一棘手的部分是必須使用動(dòng)態(tài)S
22、QL,因?yàn)樵贒DL腳本中不能直接使用變量,下面的例子演示了如何使用動(dòng)態(tài)SQL來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),并將一個(gè)用戶定義的文件組標(biāo)記為默認(rèn)文件組:DECLAREDatabaseNameASnvarchar(255)DECLAREFileGroupNameASnvarchar(255)SETDatabaseName=NSlateGravelSETFileGroupName=NUserDataEXECUTE(CREATEDATABASE+DatabaseName+ONPRIMARY(NAME=+DatabaseName+,FILENAME=S:SQLDataFiles+DatabaseName+_dat
23、a.mdf,SIZE=20MB,MAXSIZE=100MB,FILEGROWTH=30%),FILEGROUPUserData(NAME=+FileGroupName+,FILENAME=S:SQLDataFiles+DatabaseName+_data.ndf,SIZE=2048KB,FILEGROWTH=20%)LOGON(NAME=+dATABAEnAME+_log,FILENAME=T:SQLLogFiles+DatabaseName+_log.ldf,SIZE=100MB,FILEGROWTH=20%);ALTERDATABASE+DatabaseName+MODIFYFILEGRO
24、UP+FileGroupName+DEFAULT)架構(gòu)架構(gòu)是一種對(duì)象容器,在SQLServer2008中引用數(shù)據(jù)庫(kù)對(duì)象是,設(shè)定對(duì)象引用的上下文是很重要的。每個(gè)用于都被指派一個(gè)默認(rèn)的架構(gòu),當(dāng)他們登錄到SQLServer應(yīng)引用數(shù)據(jù)庫(kù)對(duì)象時(shí),這個(gè)默認(rèn)架構(gòu)將在該對(duì)象的引用方式中發(fā)揮獨(dú)特的作用。例如,假設(shè)在AdventureWorks2008數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)名為FredF的用戶,并把默認(rèn)架構(gòu)Sales指派給他。如果FredF登錄并執(zhí)行SELECT*FROMCreditCard查詢,由于其默認(rèn)架構(gòu)師Sales,CreditCard將被解析為Adventureworks2008.Sales.CreditC
25、ard。由于Sales.CreditCard表存在,因此查詢將返回該表的內(nèi)容,如果FredF執(zhí)行SELECT*FROMPerson查詢,Person將被解析為Adventureworks2008.Sales.Person,這是一個(gè)并不存在的表。因此,SQLServer會(huì)返回“無(wú)效的對(duì)象名稱”這個(gè)錯(cuò)誤。要?jiǎng)?chuàng)建架構(gòu)唯一需要的信息是指定架構(gòu)名稱,架構(gòu)的所有權(quán)默認(rèn)屬于運(yùn)行創(chuàng)建腳本的用戶,但可以把任何有效的數(shù)據(jù)庫(kù)用戶指定為所有者,最簡(jiǎn)單的方法就是把dbo指定為架構(gòu)所有者USERAdventureWorks2008GOCREATESCHEMAOperationsAUTHORIZATIONdbo該CREAT
26、ESCHEMA語(yǔ)句之后的任何架構(gòu)作用于的語(yǔ)句都將位于剛才創(chuàng)建的架構(gòu)的作用于內(nèi)。記住,架構(gòu)作用于總是起始于用戶的默認(rèn)架構(gòu),如果一個(gè)被引用的對(duì)象不是作用域限定的,解析將返回到dbo架構(gòu)如果視圖刪除一個(gè)包含對(duì)象的架構(gòu),將會(huì)產(chǎn)生錯(cuò)誤,如果仍然需要架構(gòu)中的對(duì)象,可以使用ALTERSCHEMA語(yǔ)句把它轉(zhuǎn)移到另一個(gè)架構(gòu)中,如把表DeliveryDriver從Operations架構(gòu)轉(zhuǎn)移到Production架構(gòu)中。ALTERSCHEMAProductionTRANSFEROperations.DeliveryDriver不能從數(shù)據(jù)庫(kù)中刪除擁有架構(gòu)的對(duì)象,這就是為什么讓dbo用戶擁有所有架構(gòu)的原因之一。要想改
27、變一個(gè)架構(gòu)的所有權(quán),需要改變架構(gòu)的AUTHORIZATION屬性:ALTERAUTHORIZATIONONSCHEMA:OperationsTOFredF表表的排序規(guī)則:創(chuàng)建數(shù)據(jù)庫(kù)時(shí),可以配置不同于服務(wù)器的排序規(guī)則支持。對(duì)于包含字符數(shù)據(jù)的表列來(lái)說(shuō)也是如此,如創(chuàng)建一個(gè)各地客戶可以使用自己的語(yǔ)言瀏覽器和搜索產(chǎn)品目錄的表:USERAdventureWorks2008GOCREATETABLEProduction.GlobalProductDescription(ProductDescriptionIDintIDENTITY(1,1)NOTNULL,EnglishDescriptionnvarchar
28、(400)COLLATESQL_Latin1_General_CP1_CI_ASNULL,FrenchDescriptionnvarchar(400)COLLATEFrench_CI_ASNULL,ChineseDescriptionnvarchar(400)COLLATEChinese_PRC_CI_AINULL,ModifiedDatedatetimeNOTNULL)SQLServer絕對(duì)不是使用飯一起,只是提供了一個(gè)框架來(lái)存放多種語(yǔ)言。您需要準(zhǔn)備產(chǎn)品描述的正確翻譯并把它們放到合適的列中,另外還要處理任何因?yàn)閠empdb的排序規(guī)則導(dǎo)致的愛(ài)需規(guī)則不兼容性。表的體系結(jié)構(gòu):SQLServer使用
29、8KB的數(shù)據(jù)頁(yè)春初信息,表中的所有數(shù)據(jù)都存儲(chǔ)在這些數(shù)據(jù)頁(yè)中,但數(shù)據(jù)在頁(yè)中的組織方式會(huì)因表的創(chuàng)建方式和在表創(chuàng)建后所進(jìn)行的操作有所不同。默認(rèn)情況下,所有的數(shù)據(jù)以稱為堆的無(wú)組織的方式進(jìn)行存儲(chǔ)。SQLServer并不嘗試組織或是以任何方式排序數(shù)據(jù),也不維護(hù)頁(yè)間的連接。SQLServer將所有數(shù)據(jù)頁(yè)存放在分區(qū)的邏輯單元中,除非明確分隔,否則表一般存儲(chǔ)在定義于單個(gè)文件組上的單個(gè)分區(qū)中。不過(guò),通過(guò)跨多個(gè)由文件組定義管理的文件橫向分區(qū)表,SQLServer可以把大型表劃分為較小的可管理單元。如下創(chuàng)建實(shí)驗(yàn)表并進(jìn)行差序性能測(cè)試:-創(chuàng)建新表USERAdventureWorks2008GOCREATETABLEdbo
30、.Transactions(TransactionIDintNOTNULL,ProductIDintNOTNULL,ReferenceOrderIDintNOTNULL,ReferenceOrderLineIDintNOTNULL,TransactionDatedatetimeNOTNULL,TransactionTypenchar(1)NOTNULL,QuantityintNOTNULL,ActualCostmoneyNOTNULL,ModifiedDatedatetimeNOTNULL)-填充新表USEAdventureWorks2008GOINSERTdbo.TransactionsSE
31、LECT*FROMProduction.TransactionHistoryUNIONALLSELECT*FROMProduction.TransactionHistoryArchive-查看查詢性能USERAdventureWorks2008GODBCCDROPCLEANBUFFERSSETSTATISTICSIOONDECLAREBeginDateASdatetime,EndDateASdatetimeSETBeginDate=2002-01-01SETEndDate=2002-12-31SELECTSUM(Quantity)ASTotalQuantity,SUM(ActualCost)A
32、STotalCostFROMdbo.TransactionsWHERETransactionDateBETWEENBeginDateANDEndDate可以看到,為了滿足查詢要求,SQLServer不得不掃描表,現(xiàn)在對(duì)表進(jìn)行分區(qū),把該物理劃分為多個(gè)文件,使所有的事務(wù)按照年份分開(kāi),看看會(huì)發(fā)生什么情況:-創(chuàng)建四個(gè)文件組USERMASTERGOALTERDATABASEAdventureWorks2008ADDFILEGROUPFGPre2002GOALTERDATABASEAdventureWorks2008ADDFILE(NAME=AworksPre2002,FILENAME=E:SQLData
33、AworksPre2002.ndf,SIZE=20MB,FILEGROWTH=20%)TOFILEGROUPFGPre2002GOALTERDATABASEAdventureWorks2008ADDFILEGROUPFG2002GOALTERDATABASEAdventureWorks2008ADDFILE(NAME=Aworks2002,FILENAME=E:SQLDataAworks2002.ndf,SIZE=20MB,FILEGROWTH=20%)TOFILEGROUPFG2002GOALTERDATABASEAdventureWorks2008ADDFILEGROUPFG2003GOA
34、LTERDATABASEAdventureWorks2008ADDFILE(NAME=Aworks2003,FILENAME=E:SQLDataAworks2003.ndf,SIZE=20MB,FILEGROWTH=20%)TOFILEGROUPFG2003GOALTERDATABASEAdventureWorks2008ADDFILEGROUPFG2004AndAfterGOALTERDATABASEAdventureWorks2008ADDFILE(NAME=Aworks2004AndAfter,FILENAME=E:SQLDataAworks2004AndAfter.ndf,SIZE=2
35、0MB,FILEGROWTH=20%)TOFILEGROUPFG2004AndAfterGO-創(chuàng)建分區(qū)函數(shù)CREATEPARTITIONFUNCTIONYearFunction(datetime)ASRANGERIGHTFORVALUES(1/1/2002,1/1/2003,1/1/2004)-將YearFunction創(chuàng)建的分區(qū)映射到之前創(chuàng)建的文件組CREATEPARTITIONSCHEMEYearSchemeASPARTITIONYearFunctionTO(FGPre2002,FG2002,FG2003,FG2004AndAfter)-將數(shù)據(jù)從原Transactions表中移至分區(qū)表中U
36、SERAdventureWorks2008GOCREATETABLEdbo.PartitionedTransactions(TransactionIDintNOTNULL,ProductIDintNOTNULL,ReferenceOrderIDintNOTNULL,ReferenceOrderLineIDintNOTNULL,TransactionDatedatetimeNOTNULL,TransactionTypenchar(1)NOTNULL,QuantityintNOTNULL,ActualCostmoneyNOTNULL,ModifiedDatedatetimeNOTNULL)ONYe
37、arScheme(TransactionDate)GOINSERTINTOdbo.PartitionedTransactionsSELECT*FROMdbo.Transactions-查詢性能測(cè)試USERAdventureWorks2008GODBCCDROPCLEANBUFFERSSETSTATISTICSIOONDECLAREBeginDateASdatetime,EndDateASdatetimeSETBeginDate=2002-01-01SETEndDate=2002-12-31SELECTSUM(Quantity)ASTotalQuantity,SUM(ActualCost)AST
38、otalCostFROMdbo.PartitionedTransactionsWHERETransactionDateBETWEENBeginDateANDEndDate創(chuàng)建表分區(qū)還可以通過(guò)右擊表選擇存儲(chǔ),選擇創(chuàng)建分區(qū),通過(guò)GUI進(jìn)行創(chuàng)建,這里略掉索引堆用來(lái)存儲(chǔ)數(shù)據(jù)很好,也能有效地處理新紀(jì)錄,但是要在表中尋找特定數(shù)據(jù)時(shí)就沒(méi)有那么好用了。這就是索引發(fā)揮作用的地方那個(gè)。SQLServer支持兩種類(lèi)型的索引,聚集索引和非聚集索引。它還支持XML索引和空間索引等其他類(lèi)型索引,這這些索引和普通索引的關(guān)系索引打不相同,后者將來(lái)用在數(shù)據(jù)庫(kù)表中定位大多數(shù)數(shù)據(jù)。聚集索引和非聚集索引之間的主要區(qū)別在于索引的葉級(jí)。
39、在非聚集索引中,葉級(jí)包含數(shù)據(jù)的指針。在聚集索引中,葉級(jí)包含實(shí)際數(shù)據(jù)。聚集索引:表的所有數(shù)據(jù)可存儲(chǔ)在堆中或聚集索引中,堆和聚集索引是相互排斥的。堆是一個(gè)無(wú)組織的表行集合,而聚集索引是一個(gè)有組織的表行集合。聚集鍵在索引中必須是唯一的,但創(chuàng)建索引時(shí)不必將此列標(biāo)記為唯一的。當(dāng)在未標(biāo)記的唯一的列上創(chuàng)建聚集索引時(shí),SQLServer會(huì)生成一個(gè)隱藏列,它保存一個(gè)名為唯一標(biāo)識(shí)符的4字節(jié)內(nèi)部值來(lái)唯一標(biāo)識(shí)重復(fù)的聚集索引鍵。聚集索引的葉級(jí)是實(shí)際的數(shù)據(jù)行,而不是數(shù)據(jù)指針。非聚集索引:非聚集索引更像是一本書(shū)后面的索引。當(dāng)找到索引值時(shí),并不能找到實(shí)際數(shù)行,只是獲得指定實(shí)際數(shù)據(jù)行的位置的指針。堆上的非聚集索引:當(dāng)在一個(gè)以堆
40、形式組織的表上構(gòu)建非聚集索引時(shí),索引列根據(jù)指向數(shù)據(jù)實(shí)際位置的指針?lè)诸?lèi),該指針由文件ID,頁(yè)ID和數(shù)據(jù)所在的頁(yè)槽號(hào)組成,如數(shù)據(jù)是第一個(gè)文件行總第84593頁(yè)上的第20條記錄,那么SQL將使用指針值1:84593:20,這使得SQLServer能夠在索引找到數(shù)據(jù)之后快速訪問(wèn)數(shù)據(jù)。聚集索引上的非聚集索引:當(dāng)在一個(gè)聚集索引上構(gòu)建非聚集索引時(shí),索引中的指針值就是數(shù)據(jù)行的聚集索引鍵值。一旦定位到索引值,SQLServer就是用聚集鍵導(dǎo)航聚集索引來(lái)檢索所有需要的列。包含列:非聚集索引的功能可以通過(guò)向索引的節(jié)點(diǎn)添加非鍵值得到提升,這就可使得索引覆蓋更多的查詢,減少為檢索額外值而歷遍聚集索引的次數(shù)。包含列可以提
41、高查詢覆蓋率,而不會(huì)導(dǎo)致符合索引鍵的開(kāi)銷(xiāo)。索引中標(biāo)記為included的列值出現(xiàn)在索引的頁(yè)節(jié)點(diǎn)中,在行排序中不做考慮。CREATENONCLUSTEREDINDEXIX_Person_LastNameONPerson.Person(LastName)INCLUDE(FirstName)篩選索引:篩選索引時(shí)優(yōu)化非聚集索引,它允許在數(shù)據(jù)子集上創(chuàng)建索引,使得索引結(jié)構(gòu)更小從而減少了構(gòu)建索引的時(shí)間和索引維護(hù)的成本,對(duì)于包含大量NULL值或包含數(shù)據(jù)范圍的列上的索引,篩選索引特別有用:CREATENONCLUSTEREDINDEXIX_ListPrice_ProductONProduction.Produc
42、t(ListPrice)WHEREListPrice800.00分層索引:HierarchyId是SQLServer2008中引入的一種新類(lèi)型數(shù)據(jù)。為了幫助檢索分層數(shù)據(jù),可使用兩種不同的方法在此類(lèi)型上的列構(gòu)建索引,廣度優(yōu)先索引和深度優(yōu)先索引。廣度優(yōu)先索引將統(tǒng)一級(jí)別的所有記錄組合到一起,這樣SQLServer就可以非常快速地相應(yīng)具有共同父節(jié)點(diǎn)的所有記錄的查詢??臻g索引:SQLServer2008通過(guò)兩種新的CLR數(shù)據(jù)類(lèi)型支持空間索引,geometry和geography,geometry數(shù)據(jù)類(lèi)型用于平面空間而geography數(shù)據(jù)類(lèi)型用于地形測(cè)量空間。創(chuàng)建空間索引需要兩個(gè)階段:分解和鑲嵌。在分解
43、階段,SQLServer將一個(gè)有限區(qū)域劃分為一個(gè)網(wǎng)格結(jié)構(gòu),在鑲嵌階段,表中的每個(gè)空間值都映射到每個(gè)網(wǎng)格級(jí)別。XML索引:憑借XML上建立索引的功能,能夠幫助定位和檢索XML文本中的特定數(shù)據(jù)。XML數(shù)據(jù)早SQLServer數(shù)據(jù)庫(kù)中存儲(chǔ)為BinaryLargeObject(BLOB,二進(jìn)制大型對(duì)象)。要在XML中搜索特定元素,屬性或者值,SQLServer必須首先打開(kāi)BLOB,然后將其內(nèi)容拆解開(kāi)。SQLServer通過(guò)拆解操作創(chuàng)建一個(gè)自己可以導(dǎo)航的XML對(duì)象的集合。它實(shí)質(zhì)上是提取了XML的數(shù)據(jù)結(jié)構(gòu),然后將其存儲(chǔ)在臨時(shí)的關(guān)系結(jié)構(gòu)中。XML主索引:主XML索引實(shí)際并不是構(gòu)建在XML列上,而是構(gòu)建在內(nèi)部
44、表(在索引創(chuàng)建過(guò)程中創(chuàng)建)之上的聚集索引。這個(gè)內(nèi)部表稱為節(jié)點(diǎn)表。節(jié)點(diǎn)表直接連接至在其中創(chuàng)建XML索引的表的聚集索引。要?jiǎng)?chuàng)建一個(gè)XML索引,具有XML列的表必須在其逐漸上有一個(gè)聚集索引。創(chuàng)建語(yǔ)法如下:USEAdventureWorks2008GOCREATEPRIMARYXMLINDEXXML_IX_IllustrationONProduction.Illustration(Diagram)PATH輔助XML索引:PATH輔助XML索引可以提升對(duì)XML列指定路徑表達(dá)式的XML查詢的性能。PATH輔助索引建立愛(ài)主XML索引提供的節(jié)點(diǎn)之上,語(yǔ)法如下:USERAdventureWorks2008GOC
45、REATEXMLINDEXIXML_MyPerson_AdditionalContactInfo_PathONdbo.MyPerson(AdditionalContactInfo)USINGXMLINDEXPXML_MyPerson_AdditionalContactInfoFORPATHVALUE輔助XML索引:VALUE輔助索引用來(lái)支持沒(méi)有完全指定路徑的或采用通配符來(lái)搜索值的XML查詢。語(yǔ)法如下:CREATEXMLINDEXIXML_MyPerson_AdditionalContactInfo_ValueONdbo.MyPerson(AdditionalContactInfo)USINGX
46、MLINDEXPXML_MyPerson_AdditionalContactInfoFORVALUEPROPERTY輔助XML索引:PROPERTY輔助索引用于優(yōu)化通過(guò)制定節(jié)點(diǎn)的完整路徑檢索節(jié)點(diǎn)值的查詢。語(yǔ)法如下:CREATEXMLINDEX_IXML_MyPerson_AdditionalContactInfo_PropertyONdbo.MyPerson(AdditionalContactInfo)USINGXMLINDEXPXML_MyPerson_AdditionalContactInfoFORPROPERTY維護(hù)表我們已經(jīng)深入了解了數(shù)據(jù)在表中的組織方式和優(yōu)化數(shù)據(jù)檢索的方法,接下來(lái)套路
47、如何對(duì)這個(gè)環(huán)境進(jìn)行維護(hù),表的維護(hù)基本可以分為兩種:索引的維護(hù)和索引統(tǒng)計(jì)信息的創(chuàng)建和維護(hù)索引在更新時(shí)會(huì)變得支離破碎,這是因?yàn)樗饕龝r(shí)一個(gè)連續(xù)的、排序的數(shù)據(jù)集合。要維護(hù)索引的排序順序,SQLServer必須分割完整的數(shù)據(jù)頁(yè)以容納更多的數(shù)據(jù)。這些也拆分導(dǎo)致產(chǎn)生了索引碎片,索引的碎片化將最終導(dǎo)致SQLServer在檢索數(shù)據(jù)時(shí)執(zhí)行過(guò)量的讀取,從而造成性能低下。要檢查表上的所有索引或一些特定索引的碎片,可以使用動(dòng)態(tài)管理函數(shù)sys.dm_db_index_physical_stats,此函數(shù)會(huì)返回表的索引的大量信息,包括每個(gè)數(shù)據(jù)頁(yè)上的數(shù)據(jù)量、索引的葉級(jí)和非葉級(jí)上的碎片量,以及索引中記錄的平均大小。當(dāng)擦和訊這個(gè)
48、表值函數(shù)時(shí),最感興趣的是碎片級(jí)別和每一頁(yè)填充的平均百分比。SELECT*columnlistFROMsys.dm_db_index_physical_stats(databae_id|NULL,object_id|NULL,index_id|NULL,partition_number|NULL,mode|NULL|DEFAULT)DECLAREdbIDsmallint,objectIDintSETDbID=DB_ID(AdventureWorks2008)SETobjectID=OBJECT_ID(dbo.MyPersons)SELECTindex_id,avg_gragmentation_i
49、n_percent,avg_page_space_used_in_percentFROMsys.dm_db_index_physical_stats(DbID,ObjectID,NULL,NULL,DETAILED)WHEREindex_level=0為減少頁(yè)拆分產(chǎn)生的碎片,數(shù)據(jù)庫(kù)管理員可以設(shè)計(jì)或重新生成索引,使數(shù)據(jù)頁(yè)不會(huì)完全填充。為此,可以使用填充因此,當(dāng)建立或重新生成索引時(shí),可以指定填充因子百分比,如果一個(gè)索引頁(yè)只有90%被填充,那么只有插入更多的索引時(shí)才會(huì)導(dǎo)致頁(yè)拆分,雖因產(chǎn)生碎片的時(shí)間會(huì)久些。個(gè)人認(rèn)為,索引的填充因子最好不要低于90%,在更新和查詢都很頻繁的表上,這個(gè)比例可以低至85%。
50、要去除碎片可以有三種方法:刪除并重新生成索引、原地重新生成索引或重新組織索引。-使用DROP_EXISTING選項(xiàng)創(chuàng)建索引CREATEUNIQUECLUSTEREDINDEXPK_Address_AddressIDONPerson.Address(AddressID)WITH(fillfactor=90,DROP_EXISTING=ON)-重新生成索引USEAdventureWorks2008GOALTERINDEXAK_Product_ProductNumberONPerson.ProductREBUILDWITH(FILLFACTOR=90,ONLINE=ON)USEAdventureWo
51、rks2008GOALTERINDEXALLONPerson.ProductREBUILDWITH(FILLFACTOR=90,ONLINE=ON)重新組織索引消耗的系統(tǒng)資源最少,但不如重新生成索引來(lái)的徹底。強(qiáng)制數(shù)據(jù)完整性主鍵約束:一個(gè)表有且只能有一個(gè)主鍵約束。它用來(lái)唯一標(biāo)識(shí)表中的每一行。主鍵約束可定義在單個(gè)列或者列組合上。SQLServer使用方法是在參與主鍵的列上創(chuàng)建唯一的索引。在不排序的情況下來(lái)強(qiáng)制唯一性會(huì)非常低效。SQLServer這方面的問(wèn)題是,如果聚集索引不存在,他會(huì)默認(rèn)一個(gè)唯一的聚集索引。決定什么列參與主鍵和決定什么列定義表數(shù)據(jù)的物理結(jié)構(gòu)是完全不同的。不應(yīng)假定一個(gè)主鍵同時(shí)也是表的
52、聚集鍵。記住,表的所有聚集索引將包含聚集索引鍵作為指向數(shù)據(jù)行的指針。如果主鍵很長(zhǎng),使用聚集索引支持主鍵對(duì)于非聚集索引的存儲(chǔ)和檢索是非常不利的。USERAdventureWorks2008GOCREATETABLEdbo.CreditCards(CreditCardIDintIDENTITY(1,1)NOTNULLCONSTRAINTPK_CreditCardIDPRIMARYKEYNONCLUSTERED(CreditCardID),CardTypenvarchar(50)NOTNULL,CardNumbernvarchar(25)NOTNULL,ExpMonthtinyintNOTNULL,
53、ExpYearsmallintNOTNULL,ModifiedDatedatetimeNOTNULL)USERAdventureWorks2008GOCREATETABLEdbo.CreditCards(CreditCardIDintIDENTITY(1,1)NOTNULL,CardTypenvarchar(50)NOTNULL,CardNumbernvarchar(25)NOTNULL,ExpMonthtinyintNOTNULL,ExpYearsmallintNOTNULL,ModifiedDatedatetimeNOTNULL,CONSTRAINTPK_CreditCardIDPRIMA
54、RYKEYNONCLUSTERED(CreditCardID)ALTERTABLEdbo.CreditCardsADDCONSTRAINTPK_CreditCardIDPRIMARYKEYNONCLUSTERED(CreditCardID)唯一約束:雖然一個(gè)表只能有一個(gè)主鍵約束,但是它可以有很多唯一約束。要?jiǎng)?chuàng)建唯一約束,有兩個(gè)選擇,在表上創(chuàng)建唯一索引或唯一約束。唯一索引和唯一約束的行為相似,而SQLServer將創(chuàng)建唯一索引來(lái)強(qiáng)制唯一約束。ALTERTABLEdbo.DriverADDCONSTRAINTUX_LincenseNumUNIQUENONCLUSTERED(LicenseNum)C
55、REATEUNIQUENONCLUSTEREDINDEXINDEXUX_LincenseNumONdbo.Driver(LicenseNum)外鍵約束:外鍵約束用來(lái)保證表之間的完整性,要在表上創(chuàng)建一個(gè)外鍵約束,定義在外鍵中的列必須映射到主鍵表中的列,這些列被指定為主鍵或者有唯一約束(唯一約束和唯一索引都可以)。外鍵約束有一些高級(jí)選項(xiàng),他們可以在創(chuàng)建中和創(chuàng)建后改變外鍵約束的行為。-WITHCHECK添加外鍵約束時(shí)的默認(rèn)設(shè)置,設(shè)置指定了應(yīng)對(duì)外鍵表中任何現(xiàn)有數(shù)據(jù)進(jìn)行驗(yàn)證ALTERTABLEdbo.DriverRecordWITHCHECKADDCONSTRAINTFK_DriverRecord_Dr
56、iverFOREIGNKEY(DriverID)REFERENCESdbo.Driver(DriverID)-WITHNOCHECK,設(shè)定了部隊(duì)現(xiàn)有數(shù)據(jù)進(jìn)行驗(yàn)證來(lái)使其符合新的約束ALTERTABLEdbo.DriverRecordWITHNOCHECKADDCONSTRAINTFK_DriverRecord_DriverFOREIGNKEY(DriverID)REFERENCESdbo.Driver(DriverID)級(jí)聯(lián)約束:外鍵默認(rèn)組織更新或刪除父值,然而有些時(shí)候這種行為并不合適。SQLServer提供了指定在福記錄被刪除或更新的情況下對(duì)子記錄采取何種行為的選項(xiàng)。ONDELETENOACTION和ONUPDATENOACTION是外鍵的默認(rèn)設(shè)置。這些設(shè)定指定,任何試圖刪除或更新由其他表中現(xiàn)有行的外鍵所引用的鍵值的行為都會(huì)失敗。此外還有CASCADE,SETNULL和SETDEFAULT選項(xiàng),他們?cè)试S刪除或更新鍵值,以定義的方式級(jí)聯(lián)至定義為擁有外鍵關(guān)系的表-ONDELETECASCADE如果父行被刪除,子記錄也刪除ALTERTABLEdbo.DriverRecordWITHNOCHECKADDCONSTRAINTFK_DriverRecord_DriverFOREIGNKEY(DriverID)REFERENCES
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年AI智能營(yíng)銷(xiāo)技術(shù)合作合同樣本
- 二零二五年度生態(tài)環(huán)保木工加工廠合作合同4篇
- 2025年醫(yī)療護(hù)士協(xié)議
- 2025年增資協(xié)議書(shū)面詳細(xì)約定內(nèi)容文本
- 2025年產(chǎn)品分銷(xiāo)渠道協(xié)定書(shū)
- 2025年家裝風(fēng)水合同
- 2025年埋頭競(jìng)業(yè)禁止合同
- 2025版智能家居燈具音響設(shè)備一體化采購(gòu)合同4篇
- 2025年媒介環(huán)境分析協(xié)議
- 2025版學(xué)校食堂豬肉食品安全風(fēng)險(xiǎn)評(píng)估與監(jiān)控合同2篇
- 2024人教版高中英語(yǔ)語(yǔ)境記單詞【語(yǔ)境記單詞】新人教版 選擇性必修第2冊(cè)
- 能源管理總結(jié)報(bào)告
- 挖掘機(jī)售后保養(yǎng)及維修服務(wù)協(xié)議(2024版)
- 充電樁巡查記錄表
- 阻燃材料的阻燃機(jī)理建模
- CJT 511-2017 鑄鐵檢查井蓋
- 配電工作組配電網(wǎng)集中型饋線自動(dòng)化技術(shù)規(guī)范編制說(shuō)明
- 2024高考物理全國(guó)乙卷押題含解析
- 介入科圍手術(shù)期護(hù)理
- 青光眼術(shù)后護(hù)理課件
- 設(shè)立工程公司組建方案
評(píng)論
0/150
提交評(píng)論