版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
索引建立索引的作用用戶對數(shù)據(jù)庫最頻繁的操作為數(shù)據(jù)查詢,為提高檢索數(shù)據(jù)的能力,數(shù)據(jù)庫引入索引機(jī)制保證數(shù)據(jù)記錄的唯一性實(shí)現(xiàn)表間的參照完整性減少ORDERBY、GROUPBY查詢的排序和分組時(shí)間第五講數(shù)據(jù)庫保護(hù)
數(shù)據(jù)完整性2023/7/221第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)索引的定義一個(gè)單獨(dú)的、物理的數(shù)據(jù)庫結(jié)構(gòu)。是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針表。依賴于表建立,提供了數(shù)據(jù)庫中編排表中數(shù)據(jù)的內(nèi)部方法。表存儲由兩部分組成用來存放表的數(shù)據(jù)頁面存放索引頁面索引存放在索引頁面上,通常索引頁面相對于數(shù)據(jù)頁面來說小得多。當(dāng)進(jìn)行數(shù)據(jù)檢索時(shí),系統(tǒng)先搜索索引頁面從中找到所需數(shù)據(jù)的指針,再直接通過指針從數(shù)據(jù)頁面中讀取數(shù)據(jù)。從某種程度上可以把數(shù)據(jù)庫看作一本書,把索引看作書的目錄,通過目錄查找書中的信息顯然較沒有目錄的書方便快捷。2023/7/222第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)索引的創(chuàng)建用企業(yè)管理器創(chuàng)建索引用索引創(chuàng)建向?qū)?chuàng)建索引在目錄樹中選擇要?jiǎng)?chuàng)建索引的表的數(shù)據(jù)庫結(jié)點(diǎn),從“工具”菜單中選擇“向?qū)А泵?,在出現(xiàn)的“選擇向?qū)А苯缑嬷?,單擊“?chuàng)建索引向?qū)А?,出現(xiàn)“創(chuàng)建索引向?qū)А苯缑?023/7/225第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)2023/7/226第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)單擊“下一步”,選擇要?jiǎng)?chuàng)建索引的表及其所屬的數(shù)據(jù)庫2023/7/227第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)單擊“下一步”,顯示表中已經(jīng)存在的索引信息,若表還未創(chuàng)建任何索引,不會(huì)出現(xiàn)此界面2023/7/228第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)單擊“下一步”,列出表中的所有列信息,從中選擇創(chuàng)建索引的列2023/7/229第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)單擊“下一步”,列出可供選擇的索引設(shè)置選項(xiàng)(參考CREATEINDEX命令)單擊“下一步”,完成索引創(chuàng)建界面,可指定索引名,及調(diào)整組成索引的列順序,單擊“完成”結(jié)束索引創(chuàng)建過程,系統(tǒng)會(huì)彈出一個(gè)創(chuàng)建索引成功信息對話框,2023/7/2210第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)索引的創(chuàng)建用企業(yè)管理器創(chuàng)建索引用索引創(chuàng)建向?qū)?chuàng)建索引直接創(chuàng)建索引選擇要?jiǎng)?chuàng)建索引的表,單擊右鍵,從快捷菜單中選擇“所有任務(wù)”中的“管理索引”選項(xiàng),2023/7/2211第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)出現(xiàn)“索引管理”對話框,列出了表中已存在索引,選擇“新建按鈕,進(jìn)入“創(chuàng)建索引”對話框,輸入要?jiǎng)?chuàng)建的索引名,再選擇索引列并設(shè)置索引的各種選項(xiàng),單擊“確定”按鈕完成2023/7/2212第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)用CREATEINDEX命令創(chuàng)建索引CREATEINDEX既可以創(chuàng)建一個(gè)可改變表的物理順序的簇索引也可以創(chuàng)建提高查詢性能的非簇索引CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>ON
{<表名>|<視圖名>}<列名>[ASC|DESC][,...n])[WITH[[,]FILLFACTOR=<填充因子>][[,]IGNORE_DUP_KEY][[,]DROP_EXISTING]]若使用兩個(gè)或以上的列組成一個(gè)索引,則稱為復(fù)合索引。一個(gè)索引中最多可以指定16列但列的數(shù)據(jù)類型的長度和不能超過900個(gè)字節(jié)一個(gè)表中惟一,同一數(shù)據(jù)庫或不同數(shù)據(jù)庫中可重復(fù)數(shù)據(jù)類型為TEXT、NTEXT、IMAGE或BIT的列不能作為索引的列2023/7/2213第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)用CREATEINDEX命令創(chuàng)建索引CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>ON{<表名>|<視圖名>}<列名>[ASC|DESC][,...n])[WITH[[,]FILLFACTOR=<填充因子>][[,]IGNORE_DUP_KEY][[,]DROP_EXISTING]]UNIQUE:創(chuàng)建惟一索引,即索引的鍵值不重復(fù),在列包含重復(fù)值時(shí)不能建惟一索引。還應(yīng)確定索引所包含的列均不允許NULL值CLUSTERED:創(chuàng)建的索引為簇索引,若缺省則為非簇索引NONCLUSTERED:創(chuàng)建的索引為非簇索引,其索引數(shù)據(jù)頁包含指向數(shù)據(jù)庫實(shí)際表數(shù)據(jù)頁的指針ASC|DESC:指定索引列的排序方式,默認(rèn)為升序ASC2023/7/2214第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)FILLFACTOR=<填充因子>:創(chuàng)建索引時(shí)每個(gè)索引頁的數(shù)據(jù)占索引頁大小的百分比。<填充因子>的值為0到100。它同時(shí)指出了索引頁保留的自由空間占索引頁大小的百分比,即100-<填充因子>。對于頻繁進(jìn)行大量數(shù)據(jù)插入或刪除的表,在建索引時(shí)應(yīng)為將來生成的索引數(shù)據(jù)預(yù)留較大的空間,即將<填充因子>設(shè)得較小,否則索引頁會(huì)因數(shù)據(jù)的插入而很快填滿并產(chǎn)生分頁,而分頁會(huì)大大增加系統(tǒng)的開銷。但如果設(shè)得過小又會(huì)浪費(fèi)大量的磁盤空間,降低查詢性能。因此對于此類表通常設(shè)一個(gè)大約為10的<填充因子>,而對于數(shù)據(jù)不更改的、高并發(fā)的只讀表,<填充因子>可設(shè)到95以上乃至100。IGNORE_DUP_KEY:控制當(dāng)往包含在惟一約束中的列中插入重復(fù)數(shù)據(jù)時(shí),SQLServer所作的反應(yīng)。選擇此項(xiàng),SQLServer返回一個(gè)錯(cuò)誤信息,跳過此行數(shù)據(jù)的插入,繼續(xù)執(zhí)行下面的插入操作;未選此項(xiàng),SQLServer除返回錯(cuò)誤信息外,還會(huì)回滾整個(gè)INSERT語句。DROP_EXISTING:刪除并重新創(chuàng)建簇索引。2023/7/2215第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)例:為表products創(chuàng)建一個(gè)簇索引createuniqueclusteredindexpk_p_idonproducts(ProductId)withfillfactor=10,ignore_dup_key,drop_existing例:為表products創(chuàng)建一個(gè)復(fù)合索引createindexpk_p_mainonproducts(ProductID,ProductName,UnitPrice)withfillfactor=502023/7/2216第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)查看與修改索引用企業(yè)管理器查看修改索引選擇要查看的數(shù)據(jù)庫表上單擊右鍵,從快捷菜單中選擇”所有任務(wù)“中的”管理索引“項(xiàng),出現(xiàn)”索引管理“對話框選擇要查看或修改的索引,單擊”編輯“按鈕,出現(xiàn)”修改索引“對話框可修改索引的大部分設(shè)置,還可單擊”編輯SQL…“按鈕,在顯示的SQL腳本編輯框直接修改其SQL腳本,但不能修改索引名,程序方式的索引名修改需要使用系統(tǒng)存儲過程Sp_rename要在企業(yè)管理器中修改索引名、改變其所屬文件組等其它信息則需要在表的屬性對話框中進(jìn)行,該屬性對話框是從”設(shè)計(jì)表結(jié)構(gòu)“對話框中調(diào)用,而不是直接通過快捷菜單的”屬性“菜單項(xiàng)調(diào)用2023/7/2217第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)查看與修改索引用企業(yè)管理器查看修改索引用存儲過程Sp_helpindex查看索引返回表的所有索引的信息:sp_helpindex[@objname=]‘表名‘例:查看表orders的索引
usenorthwindexecsp_helpindexorders運(yùn)行結(jié)果為3列:索引名、索引描述、索引鍵用存儲過程Sp_rename更改索引名例:更改orders表中的索引orders_quan名為orders_quantityexecsp_rename'orders.[orders_quan]','orders_quantity','index'2023/7/2218第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)刪除索引用企業(yè)管理器刪除索引在”索引管理“對話框或”表屬性“對話框中選擇要?jiǎng)h除的索引,再選擇”刪除“按鈕用DROPINDEX命令刪除索引可刪除一個(gè)或多個(gè)當(dāng)前數(shù)據(jù)庫中的索引
DROPINDEX‘表名.索引名'[,...n]注不能刪除由CREATETABLE或ALTERTABLE命令創(chuàng)建的PRIMARYKEY或UNIQUE約束索引不能刪除系統(tǒng)表中的索引例:刪除表products中的索引p_quantitydropindexproducts1.p_quantity2023/7/2219第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)數(shù)據(jù)完整性概述輸入數(shù)據(jù)庫中的數(shù)據(jù)可能無效或錯(cuò)誤,為保證輸入的數(shù)據(jù)符合規(guī)定,成為數(shù)據(jù)庫系統(tǒng)特別是多用戶關(guān)系數(shù)據(jù)庫系統(tǒng)首要關(guān)注的問題數(shù)據(jù)完整性(DataIntegrity)指數(shù)據(jù)的精確性(Accuracy)和可靠性(Reliability),為防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤信息的輸入輸出造成的無效操作或錯(cuò)誤信息分類(4類)實(shí)體完整性(EntityIntegrity)域完整性DomainIntegrity參照完整性ReferentialIntegrity用戶定義的完整性User-definedIntegrity2023/7/2220第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)實(shí)體完整性(EntityIntegrity)規(guī)定表的每一行在表中是惟一的。實(shí)體表中定義的UNIQUE、PRIMARYKEY、和IDENTITY約束都是實(shí)體完整性的體現(xiàn)域完整性DomainIntegrity指數(shù)據(jù)庫表中的列必須滿足某種特定的數(shù)據(jù)類型或約束,其中約束又包括取值范圍、精度等規(guī)定。表中的CHECK、FOREIGNKEY約束和DEFAULT、NOTNULL定義都屬于域完整性的范疇參照完整性ReferentialIntegrity兩個(gè)表的主鍵和外鍵的數(shù)據(jù)應(yīng)對應(yīng)一致。它確保了有主鍵的表中對應(yīng)其它表的外鍵的行存在,即保證表之間的數(shù)據(jù)的一致性,防止數(shù)據(jù)丟失或無意義的數(shù)據(jù)在數(shù)據(jù)庫中擴(kuò)散。參照完整性是建立在外鍵和主鍵之間或外鍵和惟一性關(guān)鍵字之間的關(guān)系上的,在SQLServer中參照完整性作用表現(xiàn)在如下幾個(gè)方面禁止在從表中插入包含主表中不存在的關(guān)鍵字的數(shù)據(jù)行2023/7/2221第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)禁止會(huì)導(dǎo)致從表中的相應(yīng)值孤立的主表中的外關(guān)鍵字值改變禁止刪除在從表中的有對應(yīng)記錄的主表記錄用戶定義的完整性User-definedIntegrity根據(jù)應(yīng)用環(huán)境的不同所需的一些特殊約束條件,是針對某個(gè)特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。數(shù)據(jù)完整性類型實(shí)現(xiàn)方法實(shí)體完整性PrimaryKey、UniqueKey、UniqueIndex、IdentityColumn域完整性Default、CHECK、ForeignKey、DataType、Rule參照完整性ForeignKey、CHECK、Trigger、Procedure用戶定義完整性Rule、Trigger、Procedure、CreateTable中的所有列級和表級約束2023/7/2222第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用約束實(shí)現(xiàn)數(shù)據(jù)完整性約束(Constraint)限制輸入到表中的值的范圍,SQLServer提供多種約束PrimaryKey約束ForeignKey約束Unique約束CHECK約束創(chuàng)建約束前要考慮的問題什么約束實(shí)現(xiàn)自己所需的數(shù)據(jù)完整性約束實(shí)施的時(shí)機(jī)列級約束行定義的一部分,只能應(yīng)用在一列上表級約束定義獨(dú)立于列的定義,可以應(yīng)用在一個(gè)表中的多列上查看約束信息使用sp_helpconstraint系統(tǒng)存儲過程:sp_helpconstraint<表名>2023/7/2223第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用PRIMARYKEY約束(主鍵約束)指定表的一列或幾列的組合值在表中具有惟一性,即能惟一標(biāo)識一行記錄。操作方式有3在創(chuàng)建表時(shí),定義主鍵,主鍵是表的一部分在一個(gè)沒有定義主鍵的表上,加上一個(gè)主鍵修改或刪除表上已經(jīng)定義的主鍵定義主鍵CONSTRAINT<約束名>PRIMARYKEY[CLUSTERED|NONCLUSTERED](<列名1>[,<列名2>,…,<列名16>)]約束名在數(shù)據(jù)庫中是惟一的,若不指定,系統(tǒng)會(huì)自動(dòng)生成一個(gè)約束名指定索引類別,CLUSTERED為缺省值指定組成主鍵的列名,主鍵最多由16列組成每個(gè)表中只能有一列被指定為主鍵IMAGE和TEXT類型的列不能被指定為主鍵不允許指定的主鍵列有NULL屬性若在多列上建立主鍵,必須建立表級約束2023/7/2224第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)例:創(chuàng)建一個(gè)產(chǎn)品信息表以產(chǎn)品編號和名稱為主關(guān)鍵字createtableproducts(ProductIDchar(8)notnull,ProductNamechar(10)notnull,pricemoneydefault0.01,quantitysmallintnull,constraintpk_p_idprimarykey(ProductID,ProductName))2023/7/2225第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用企業(yè)管理器定義主鍵創(chuàng)建表時(shí)在某(些)列上單擊右鍵,從快捷菜單中選擇”設(shè)置主鍵“設(shè)置或取消主鍵創(chuàng)建表時(shí)選擇某(些)列上,單擊工具欄上的”主鍵“圖標(biāo)設(shè)置或取消主鍵查看主鍵信息使用存儲過程sp_pkeys:sp_pkeys<表名>刪除主鍵ALTERTABLE<表名>DROP{[CONSTRAINT]<主鍵名>}[,…n]例:刪除建立在表test1上的主鍵約束ALTERTABLEproductsDROPCONSTRAINTpk_p_id2023/7/2226第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)添加主鍵ALTERTABLE<表名>ADD[CONSTRAINT]<主鍵名>]PRIMARYKEY[CLUSTERED|NONCLUSTERED](<列名1>[,<列名2>,…,<列名16>)]例:恢復(fù)表test1中的主鍵ALTERTABLEproductsADDCONSTRAINTpk_p_idPRIMARYKEYCLUSTERED(ProductID,ProductName)Go2023/7/2227第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用UNIQUE約束用來確保不受主鍵約束的列上的數(shù)據(jù)的惟一性,與主鍵的區(qū)別為:用在非主鍵的一列或多列上要求數(shù)據(jù)唯一的情況允許列可以有NULL值可在一個(gè)表上設(shè)置多個(gè)唯一約束,而一個(gè)表上只能有一個(gè)主鍵在創(chuàng)建表時(shí)定義UNIQUE約束CONSTRAINT<約束名>UNIQUE[CLUSTERED|NONCLUSTERED]<列名1>[,<列名2>,…,<列名16>]例:定義一個(gè)員工信息表,其中員工的身份證號具有惟一性createtableemployees(emp_idchar(8),emp_namechar(10),emp_cardidchar(18),constraintpk_emp_idprimarykey(emp_id),constraintuk_emp_cardidunique(emp_cardid))2023/7/2228第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用企業(yè)管理器完成UNIQUE約束進(jìn)入”設(shè)計(jì)表“窗口,在要添加UNIQUE約束的行上單擊右鍵,從快捷菜單中選擇”屬性“命令進(jìn)入”索引/鍵“選項(xiàng)卡,單擊”新建“按鈕,在列名列表中選擇約束列選中”創(chuàng)建Unique“復(fù)選框,再選中”索引“單選按鈕,單擊”關(guān)閉“完成在”索引/鍵“選項(xiàng)卡中,選擇相應(yīng)的UNIQUE約束名,單擊”刪除“按鈕可刪除約束刪除UNIQUE約束ALTERTABLE<表名>DROP{[CONSTRAINT]<唯一約束名>}[,…n]添加UNIQUE約束ALTERTABLE<表名>ADD[CONSTRAINT]<唯一約束名>]UNIQUE[CLUSTERED|NONCLUSTERED](<列名1>[,<列名2>,…,<列名16>)]2023/7/2229第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用CHECK約束對輸入列或整個(gè)表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫的數(shù)據(jù)完整性與ForeignKey約束的相同之處通過檢查數(shù)據(jù)值的合理性來實(shí)現(xiàn)數(shù)據(jù)完整性的維護(hù)與ForeignKey約束的不同之處ForeignKey約束是從另一張表上獲得合理數(shù)據(jù)CHECK約束通過對一個(gè)邏輯表達(dá)式的結(jié)果進(jìn)行判斷來對數(shù)據(jù)進(jìn)行核查定義CHECK約束CONSTRAINT<約束名>(邏輯表達(dá)式)添加CHECK約束返回值為TRUE或FALSE2023/7/2230第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用CHECK約束添加CHECK約束ALTERTABLE<表名>{ADD<列名><列定義>CHECK(邏輯表達(dá)式)|[WITHCHECK|WITHNOCHECK]ADDCONSTRAINT<CHECK約束名>CHECK(邏輯表達(dá)式)[,…n]}[,…]刪除CHECK約束ALTERTABLE<表名>DROP{[CONSTRAINT]<CHECK約束名>}[,…n]使CHECK約束無效ALTERTABLE<表名>{CHECK|NOCHECK}CONSTRAINT{ALL|<約束名>}[,…n]}2023/7/2231第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)例:使authors表上的所有約束無效USEpubsGOALTERTABLEauthorsNOCHECKCONSTRAINTALL例:創(chuàng)建一個(gè)訂貨表,其中定貨量必須不小于10createtableorders(order_idchar(8),p_idchar(8),p_namechar(10),quantitysmallint,constraintpk_order_idprimarykey(order_id),constraintchk_quantitycheck(quantity>=10))2023/7/2232第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用企業(yè)管理器完成CHECK約束進(jìn)入”設(shè)計(jì)表“窗口,在要添加CHECK約束的列上單擊右鍵,從快捷菜單中選擇”屬性“命令進(jìn)入”CHECK約束“選項(xiàng)卡,單擊”新建“按鈕,在”約束表達(dá)式“文本框中,輸入檢查約束的邏輯表達(dá)式可在”約束名“文本框中輸入約束名可選擇”創(chuàng)建中檢查現(xiàn)存數(shù)據(jù)“對現(xiàn)存數(shù)據(jù)進(jìn)行檢查可設(shè)置”對INSERT和UPDATE強(qiáng)制約束“為空,使插入或修改數(shù)據(jù)時(shí)檢查約束無效可設(shè)置”對復(fù)制強(qiáng)制約束“為空,使數(shù)據(jù)復(fù)制時(shí)檢查約束無效2023/7/2233第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用FOREIGNKEY(外鍵)約束維護(hù)兩個(gè)表之間的一致性關(guān)系定義主鍵約束的表中更新列值時(shí)其它表中有與之相關(guān)聯(lián)的外鍵約束的表中的外鍵列也將被相應(yīng)地做相同的更新當(dāng)向含有外鍵的表插入數(shù)據(jù)時(shí),如果與之相關(guān)聯(lián)的表的列中無與插入的外鍵列值相同的值時(shí),系統(tǒng)會(huì)拒絕插入數(shù)據(jù)定義外鍵約束CONSTRAINT<約束名>FOREIGNKEY<列名1>[,<列名2>,…,<列名16>]REFERENCES
<關(guān)聯(lián)表名>[(<關(guān)聯(lián)列1>[,<關(guān)聯(lián)列2>,…,<關(guān)聯(lián)列16>])][ONDELETE{CASCADE|NOACTION}][ONUPDATE{CASCADE|NOACTION}]][NOTFORREPLICATION]指定要建立關(guān)聯(lián)的表的信息SQLServer會(huì)產(chǎn)生一個(gè)錯(cuò)誤并將父表中的刪除、更新操作回滾.為缺省值2023/7/2234第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用FOREIGNKEY(外鍵)約束ONDELETECASCADE(ONUPDATE{CASCADE):指定在刪除(更新)表中數(shù)據(jù)時(shí),對關(guān)聯(lián)表所做的相關(guān)操作在子表中有數(shù)據(jù)行與父表中的對應(yīng)數(shù)據(jù)行相關(guān)聯(lián)的情況下,如果指定了值CASCADE則在刪除(更新)父表數(shù)據(jù)行時(shí),會(huì)將子表中對應(yīng)的數(shù)據(jù)行刪除(更新)例:創(chuàng)建一個(gè)訂貨表與前面創(chuàng)建的產(chǎn)品表相關(guān)聯(lián)createtableorders(OrderIDchar(8),ProductIDchar(8),ProductNamechar(10),constraintpk_order_idprimarykey(OrderID),foreignkey(ProductID,ProductName)referencesproducts(ProductID,ProductName))未給外鍵命名,系統(tǒng)賦予缺省名2023/7/2235第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)添加外鍵約束ALTERTABLE<表名>(<列名><列定義>[CONSTRAINT<外鍵約束名>][[FOREIGNKEY]REFERENCES<關(guān)聯(lián)表名>[(<關(guān)聯(lián)列>)][ONDELETE{CASCADE|NOACTION}][ONUPDATE{CASCADE|NOACTION}][CONSTRAINT<外鍵約束名>]FOREIGNKEY[(<列名1>,…<列名n>)]REFERENCES<關(guān)聯(lián)表名>[(<關(guān)聯(lián)列>[,…])]刪除外鍵約束ALTERTABLE<表名>DROP{[CONSTRAINT]<FOREIGN約束名>}[,…n]2023/7/2236第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用數(shù)據(jù)庫關(guān)系圖管理外鍵約束以圖形化方式管理和使用數(shù)據(jù)庫的表、列、索引和約束使用圖表建立外鍵約束的步驟展開要建立外鍵的表所在的數(shù)據(jù)庫結(jié)點(diǎn)在”關(guān)系圖“上單擊右鍵,從快捷菜單中選擇”新建數(shù)據(jù)庫關(guān)系圖“命令出現(xiàn)”創(chuàng)建數(shù)據(jù)庫關(guān)系圖向?qū)А敖缑妫瑔螕簟毕乱徊健斑x擇要建立關(guān)系的表,單擊”下一步“,單擊”完成“出現(xiàn)”新關(guān)系圖“界面,在事先設(shè)計(jì)好表之間的主鍵約束、UNIQUE約束和外鍵關(guān)系后,使用鼠標(biāo)拖曳字段名到其它表的相應(yīng)字段上,在出現(xiàn)的”創(chuàng)建關(guān)系“對話框中定義關(guān)系要?jiǎng)h除已定義的關(guān)系,單擊連線,右擊,從快捷菜單中選擇”刪除“命令要修改已定義的關(guān)系,單擊連線,右擊,從快捷菜單中選擇”屬性“命令,再選擇”關(guān)系“選項(xiàng)卡,進(jìn)行外鍵屬性修改2023/7/2237第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)規(guī)則(Rule)數(shù)據(jù)庫中對存儲在表列中值的規(guī)定和限制。單獨(dú)存儲、獨(dú)立的數(shù)據(jù)庫對象。規(guī)則與其作用的表相互獨(dú)立,即表的刪除、修改不會(huì)對與之相連的規(guī)則產(chǎn)生影響。規(guī)則和約束可以同時(shí)使用,表列可以有一個(gè)規(guī)則及多個(gè)CHECK約束規(guī)則與CHECK約束很相似,而使用在ALTERTABLE或CREATETABLE命令中的CHECK約束是更標(biāo)準(zhǔn)的限制列值的方法。創(chuàng)建規(guī)則用CREATERULE命令創(chuàng)建規(guī)則CREATERULE<規(guī)則名>AS<條件表達(dá)式>規(guī)則的定義,可以是能用于WHERE條件子句中的任何表達(dá)式,可以包含算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞,如INLIKE、BETWEEN等,必須以字符@開頭2023/7/2238第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)例:創(chuàng)建雇傭日期規(guī)則hire_date_rulecreaterulehire_date_ruleas@hire_date>='1990-01-01'and@hire_date<=getdate()例:創(chuàng)建工作級別規(guī)則job_level_rulecreaterulejob_level_ruleas@job_levelin('1','2','3','4','5')例:創(chuàng)建評分規(guī)則grade_rulecreaterulegrade_ruleas@valuebetween1and100例:創(chuàng)建字符規(guī)則my_character_rule1createrulemy_character_rule1as@valuelike'[a-z]%[0-9]'/*字符串必須以a到f的字母開頭,以0到9的數(shù)字結(jié)尾*/例:創(chuàng)建規(guī)則ID_rulecreateruleID_ruleas@IDlike‘[0-9][0-9][0-9]’2023/7/2239第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)用企業(yè)管理器創(chuàng)建規(guī)則在企業(yè)管理器中選擇數(shù)據(jù)庫對象”規(guī)則“,單擊右鍵,從快捷菜單中選擇”新建規(guī)則“選項(xiàng),出現(xiàn)”創(chuàng)建規(guī)則屬性“對話框輸入規(guī)則名和表達(dá)式后,單擊”確定“按鈕即完成規(guī)則的創(chuàng)建查看規(guī)則用企業(yè)管理器查看規(guī)則在企業(yè)管理器中選擇”規(guī)則“對象,即可從右邊的任務(wù)板中看到規(guī)則的大部分信息,包括規(guī)則名、所有者、創(chuàng)建時(shí)間等要查看規(guī)則表達(dá)式,需查看規(guī)則的屬性,選擇要查看規(guī)則,單擊右鍵,從快捷菜單中選擇”屬性“選項(xiàng),出現(xiàn)”規(guī)則屬性“對話框,可從中編輯規(guī)則表達(dá)式、修改規(guī)則名、用存儲過程Sp_helptext查看規(guī)則sp_helptext[@objname=]‘規(guī)則名'例:查看規(guī)則hire_date_ruleexecsp_helptexthire_date_rule2023/7/2240第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)規(guī)則的綁定與松綁創(chuàng)建規(guī)則后規(guī)則僅僅只是一個(gè)存在于數(shù)據(jù)庫中的對象并未發(fā)生作用,要將規(guī)則綁定到表列,才能達(dá)到創(chuàng)建規(guī)則的目的。綁定:指定規(guī)則作用于哪個(gè)表的哪一列。表的一列只能與一個(gè)規(guī)則相綁定,而一個(gè)規(guī)則可以綁定多個(gè)對象。解除規(guī)則與對象的綁定稱為松綁。用存儲過程Sp_bindrule綁定規(guī)則綁定一個(gè)規(guī)則到表的一列上sp_bindrule[@rulename=]‘規(guī)則名',[@objname=]‘對象名'2023/7/2241第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)例:綁定規(guī)則ID_rule到orders表的字段OrderIDexecsp_bindruleID_rule,‘Orders.[OrderID]'注:規(guī)則對已經(jīng)輸入表中的數(shù)據(jù)不起作用規(guī)則所指定的數(shù)據(jù)類型必須與所綁定的對象的數(shù)據(jù)類型一致規(guī)則不能綁定一個(gè)數(shù)據(jù)類型為TEXTMAGE或TIMESTAMP的列可直接用一個(gè)新的規(guī)則來綁定列,而不需要先將其原來綁定的規(guī)則解除,系統(tǒng)會(huì)將舊規(guī)則覆蓋用存儲過程Sp_unbindrule解除規(guī)則的綁定sp_unbindrule[@objname=]‘對象名‘例:解除規(guī)則ID_rule與表Orders的綁定execsp_unbindruleOrders2023/7/2242第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)用企業(yè)管理器管理規(guī)則的綁定在企業(yè)管理器中選擇要進(jìn)行綁定設(shè)置的規(guī)則,單擊右鍵,從快捷菜單中選擇”屬性“選項(xiàng),出現(xiàn)”規(guī)則屬性“對話框,”綁定UDT…“按鈕用于綁定用戶自定義數(shù)據(jù)類型,”綁定列…“按鈕用于綁定表列單擊”綁定UDT…“按鈕,出現(xiàn)”綁定規(guī)則到用戶自定義數(shù)據(jù)類型“對話框單擊”綁定列…“按鈕,出現(xiàn)”綁定規(guī)則到表列“對話框刪除規(guī)則在企業(yè)管理器中選擇規(guī)則,單擊右鍵,從快捷菜單中選擇”刪除“命令刪除規(guī)則使用DROPRULE命令刪除當(dāng)前數(shù)據(jù)庫中的一個(gè)或多個(gè)規(guī)則DROPRULE{<規(guī)則名>}[,...n]注:在刪除一個(gè)規(guī)則前,必須先將與其綁定的對象解除綁定例:刪除多個(gè)規(guī)則droprulemytest1_rule,mytest2_rule2023/7/2243第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)使用默認(rèn)值(Default)
向用戶輸入記錄時(shí)沒有指定具體數(shù)據(jù)的列中自動(dòng)插入的數(shù)據(jù)默認(rèn)值對象與ALTERTABLE或CREATETABLE命令操作表時(shí)用DEFAULT選項(xiàng)指定的默認(rèn)省值功能相似,但默認(rèn)值對象可以用于多個(gè)列管理和使用與規(guī)則相似,表的一列只能與一個(gè)默認(rèn)值相綁定通過定義列的默認(rèn)值或使用數(shù)據(jù)庫的默認(rèn)值對象綁定表列來指定列的默認(rèn)值,SQLServer推薦使用默認(rèn)約束而不使用定義默認(rèn)值的方式來指定列的默認(rèn)值創(chuàng)建默認(rèn)值用CREATEDEFAULT命令創(chuàng)建默認(rèn)值CREATEDEFAULT<默認(rèn)名>AS<常量表達(dá)式>例:創(chuàng)建生日默認(rèn)值birthday_defacreatedefaultbirthday_defaas'1978-1-1'例:創(chuàng)建ProductName默認(rèn)值Pname_defacreatedefaultPname_defaas‘car’默認(rèn)值的定義。<常量表達(dá)式>子句可以是數(shù)學(xué)表達(dá)式或函數(shù),也可以包含表列名或其它數(shù)據(jù)庫對象。2023/7/2244第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)用企業(yè)管理器創(chuàng)建默認(rèn)值選擇數(shù)據(jù)庫對象”默認(rèn)“,單擊右鍵,從快捷菜單中選擇”新建默認(rèn)“選項(xiàng),出現(xiàn)”創(chuàng)建默認(rèn)值屬性“對話框,輸入默認(rèn)值名和值表達(dá)式后,單擊”確定“按鈕完成默認(rèn)值的創(chuàng)建查看和修改默認(rèn)值
用企業(yè)管理器查看默認(rèn)值選擇“默認(rèn)”對象,選擇要查看的默認(rèn)值,單擊右鍵,從快捷菜單中選擇“屬性”,出現(xiàn)“默認(rèn)值屬性”對話框,編輯默認(rèn)值的值表達(dá)式修改默認(rèn)值名。用存儲過程Sp_helptext查看默認(rèn)值的細(xì)節(jié)例:查看默認(rèn)值birthday_defaexecsp_helptextPname_defa可以用Sp_rename存儲過程修改也可以在企業(yè)管理器的任務(wù)板窗口中直接修改2023/7/2245第五講 數(shù)據(jù)庫保護(hù)(數(shù)據(jù)完整性)默認(rèn)值的綁定與松綁同規(guī)則一樣需要將默認(rèn)值與數(shù)據(jù)庫表綁定后,才能發(fā)揮作用。用企業(yè)管理器管理默認(rèn)值的綁定選擇要進(jìn)行綁定設(shè)置的默認(rèn)值,單擊右鍵,從快捷菜單中選擇“屬性”,出現(xiàn)“默認(rèn)值屬性”對話框,單擊“綁定UDT…”按鈕,綁定用戶自定義數(shù)據(jù)類型;單擊“綁定列…”按鈕綁定表列。用存儲過程Sp_bindefault綁定默認(rèn)值綁定一個(gè)默認(rèn)值到表的一個(gè)列上sp_bindefault[@defname=]‘默認(rèn)名',[@objname=]‘對象名'例:綁定默認(rèn)值Pname_defa到表Orders上execsp_bindefaultPname_defa,‘Orders.ProductName’用存儲過程Sp_unbindefault解除默認(rèn)值的綁定Sp_unbindefault[@objname=]‘對象名'例:解除默認(rèn)值num_default與表products的quantity列的綁定execsp_unbindefault‘Orders.[ProductName]’不能綁定默認(rèn)值到一個(gè)用CREATETABLE或ALTERTABLE命令創(chuàng)建或修改表時(shí)用DEFAUL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新房電商團(tuán)購合作協(xié)議范本(詳盡版)3篇
- 2025年度鋁材深加工技術(shù)轉(zhuǎn)移與生產(chǎn)許可合同4篇
- 二零二五版會(huì)員尊享醫(yī)療健康管理協(xié)議3篇
- 二零二五年餐飲業(yè)油煙排放監(jiān)測與驗(yàn)收合同3篇
- 二零二五年度高新技術(shù)企業(yè)個(gè)人知識產(chǎn)權(quán)連帶責(zé)任保證擔(dān)保合同3篇
- 二零二五臨時(shí)客服人員服務(wù)協(xié)議3篇
- 2025版大型體育賽事贊助合同連帶擔(dān)保承諾書4篇
- 2025年西瓜種植與深加工一體化產(chǎn)業(yè)合作協(xié)議3篇
- 物業(yè)管理服務(wù)2025年度合同6篇
- 2025年學(xué)校物業(yè)管理與校園綠化養(yǎng)護(hù)與生態(tài)保護(hù)合同3篇
- 蘇北四市(徐州、宿遷、淮安、連云港)2025屆高三第一次調(diào)研考試(一模)語文試卷(含答案)
- 第7課《中華民族一家親》(第一課時(shí))(說課稿)2024-2025學(xué)年統(tǒng)編版道德與法治五年級上冊
- 2024年醫(yī)銷售藥銷售工作總結(jié)
- 急診科十大護(hù)理課件
- 山東省濟(jì)寧市2023-2024學(xué)年高一上學(xué)期1月期末物理試題(解析版)
- GB/T 44888-2024政務(wù)服務(wù)大廳智能化建設(shè)指南
- 2025年上半年河南鄭州滎陽市招聘第二批政務(wù)輔助人員211人筆試重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 山東省濟(jì)南市歷城區(qū)2024-2025學(xué)年七年級上學(xué)期期末數(shù)學(xué)模擬試題(無答案)
- 國家重點(diǎn)風(fēng)景名勝區(qū)登山健身步道建設(shè)項(xiàng)目可行性研究報(bào)告
- 投資計(jì)劃書模板計(jì)劃方案
- 《接觸網(wǎng)施工》課件 3.4.2 隧道內(nèi)腕臂安裝
評論
0/150
提交評論