數(shù)據(jù)庫系統(tǒng)原理與設(shè)計實驗教程 第4版 課件 第4章 數(shù)據(jù)庫安全性與完整性_第1頁
數(shù)據(jù)庫系統(tǒng)原理與設(shè)計實驗教程 第4版 課件 第4章 數(shù)據(jù)庫安全性與完整性_第2頁
數(shù)據(jù)庫系統(tǒng)原理與設(shè)計實驗教程 第4版 課件 第4章 數(shù)據(jù)庫安全性與完整性_第3頁
數(shù)據(jù)庫系統(tǒng)原理與設(shè)計實驗教程 第4版 課件 第4章 數(shù)據(jù)庫安全性與完整性_第4頁
數(shù)據(jù)庫系統(tǒng)原理與設(shè)計實驗教程 第4版 課件 第4章 數(shù)據(jù)庫安全性與完整性_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第1頁第4章數(shù)據(jù)庫安全性與完整性數(shù)據(jù)庫系統(tǒng)原理實驗教程第4版4.1相關(guān)知識4.1.1數(shù)據(jù)庫安全性4.1.2數(shù)據(jù)庫完整性4.2實驗十安全性定義與檢查4.2.1實驗?zāi)康呐c要求4.2.2實驗案例4.2.3實驗內(nèi)容4.3實驗十一完整性定義與檢查4.3.1實驗?zāi)康呐c要求4.3.2實驗案例4.3.3實驗內(nèi)容目錄第3頁數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄密、更改或破壞。數(shù)據(jù)庫的完整性約束是指數(shù)據(jù)的正確性與相容性,是為了防止數(shù)據(jù)庫存在不符合語義的數(shù)據(jù)第4頁4.1相關(guān)知識4.1.1數(shù)據(jù)庫安全性1.登錄賬號的管理登錄是通過帳號和口令訪問SQLServer的數(shù)據(jù)庫。登錄SQLServer服務(wù)器時,SQLServer有三個默認的用戶登錄帳號:sa、builtin\administrators和域名\administrator。(1)sa:SQLServer系統(tǒng)管理員登錄賬號,該賬號擁有最高管理權(quán)限,可以執(zhí)行服務(wù)器范圍內(nèi)的所有權(quán)限。(2)builtin\administrators:一個Windows組賬號,凡屬于該組的用戶賬號都可以作為SQLServer登錄賬號使用。(3)域名\administrator:一個Windows用戶賬號,允許作為SQLServer登錄賬號使用。第5頁2.數(shù)據(jù)庫用戶的管理數(shù)據(jù)庫用戶有:

(1)dbo用戶:數(shù)據(jù)庫擁有者或數(shù)據(jù)庫創(chuàng)建者,dbo在其所擁有的數(shù)據(jù)庫中擁有所有的操作權(quán)限。dbo的身份可被重新分配給另一個用戶,系統(tǒng)管理員sa可作為其所管理的任何數(shù)據(jù)庫的dbo用戶。(2)guest用戶:如果guest用戶在數(shù)據(jù)庫存在,則允許任意一個登錄用戶作為guest用戶訪問數(shù)據(jù)庫,其中包括那些不是數(shù)據(jù)庫用戶的SQL服務(wù)器用戶。除系統(tǒng)數(shù)據(jù)庫master和臨時數(shù)據(jù)庫tempdb的guest用戶不能被刪除外,其他數(shù)據(jù)庫都可以將自己guest用戶刪除,以防止非數(shù)據(jù)庫用戶的登錄用戶對數(shù)據(jù)庫進行訪問。

(3)新建的數(shù)據(jù)庫用戶:用戶根據(jù)實際需要創(chuàng)建不同權(quán)限的數(shù)據(jù)庫用戶。第6頁3.數(shù)據(jù)庫角色的管理用戶自定義的數(shù)據(jù)庫角色有兩種類型:即標準角色和應(yīng)用程序角色。①標準角色通過對用戶權(quán)限等級的認定而將用戶劃分為不用的用戶組,用戶屬于一個或多個角色,從而實現(xiàn)管理的安全性。②應(yīng)用程序角色是一種比較特殊的角色。當(dāng)我們打算讓某些用戶只能通過特定的應(yīng)用程序間接地存取數(shù)據(jù)庫中的數(shù)據(jù)而不是直接地存取數(shù)據(jù)庫數(shù)據(jù)時,就應(yīng)該考慮使用應(yīng)用程序角色。當(dāng)某一用戶使用了應(yīng)用程序角色時,他便放棄了已被賦予的所有數(shù)據(jù)庫專有權(quán)限,他所擁有的只是應(yīng)用程序角色被設(shè)置的角色。第7頁4.SQLServer的權(quán)限管理SQLServer權(quán)限分為三類:對象權(quán)限、語句權(quán)限、隱含權(quán)限。(1)對象權(quán)限對象權(quán)限是指用戶是否允許對數(shù)據(jù)庫中的表、視圖、存儲過程等對象的操作權(quán)限,其具體內(nèi)容如圖4-1所示。

第8頁(2)語句權(quán)限語句權(quán)限相當(dāng)于數(shù)據(jù)庫定義語言的語句權(quán)限,具體內(nèi)容如圖4-2所示。第9頁(3)隱含權(quán)限隱含權(quán)限是指由SQLServer預(yù)定義的服務(wù)器角色、數(shù)據(jù)庫所有者dbo、數(shù)據(jù)庫對象所有者所擁有的權(quán)限,它相當(dāng)于內(nèi)置權(quán)限,不需要明確地授予這些權(quán)限。權(quán)限管理的內(nèi)容有3方面:①授予權(quán)限。即允許某個用戶或角色對一個對象執(zhí)行某種操作或語句。②拒絕權(quán)限。即拒絕某個用戶或角色訪問某個對象,即使某個用戶或角色被授予這種權(quán)限,仍然不允許執(zhí)行相應(yīng)的操作。③取消權(quán)限。即不允許某個用戶或角色對一個對象執(zhí)行某種操作或某種語句。不允許和拒絕是不同的,不允許還可以通過加入角色來獲得允許,而拒絕是無法通過角色來獲得允許的。三種權(quán)限沖突時,拒絕權(quán)限起作用。第10頁4.1.2數(shù)據(jù)庫完整性數(shù)據(jù)庫的完整性主要包括:實體完整性、參照完整性、用戶自定義完整性。實體完整性要求基本表的主鍵值唯一且不允許為空值;參照完整性為若干個表中的相應(yīng)元組建立聯(lián)系;用戶自定義完整性就是針對某一具體應(yīng)用的數(shù)據(jù)必須滿足的語義要求,由RDBMS提供而不必由應(yīng)用程序承擔(dān)。第11頁1.SQLServer數(shù)據(jù)完整性分類SQLServer的數(shù)據(jù)完整性可分為3類,如表4-1所示。第12頁(1)實體完整性。實體完整性為表級完整性,它要求表中所有的元組都應(yīng)該有一個惟一的標識符,這個標識符就是平常所說的主碼。(2)參照完整性。參照完整性是表級完整性,它維護參照表中的外碼與被參照表中主碼的相容關(guān)系。如果在被參照表中某一元組被外碼參照,那么這一行既不能被刪除,也不能更改其主碼。(3)用戶自定義完整性。用戶自定義完整性為列級和元組級完整性。它為列或列組指定一個有效的數(shù)據(jù)集,并確定該列是否允許為空。第13頁4.2實驗十安全性定義與檢查4.2.1實驗?zāi)康呐c要求掌握登錄賬號的創(chuàng)建、修改、刪除和禁止操作。掌握數(shù)據(jù)庫用戶的添加和刪除操作。掌握數(shù)據(jù)庫角色的創(chuàng)建、刪除;數(shù)據(jù)庫角色成員的添加和刪除。掌握權(quán)限管理中語句權(quán)限和對象權(quán)限的管理。掌握數(shù)據(jù)庫是如何進行身份檢查和權(quán)限檢查的。熟練運用數(shù)據(jù)庫的安全機制操作數(shù)據(jù)庫。第14頁4.2.2實驗案例在SQLServe中,登錄賬號、數(shù)據(jù)庫用戶、數(shù)據(jù)庫角色以及權(quán)限的管理都可以通過企業(yè)管理器來完成,前面已經(jīng)講述。下面使用T-SQL語句來實現(xiàn)登錄賬號、數(shù)據(jù)庫用戶、數(shù)據(jù)庫角色以及權(quán)限的管理功能。1.登錄賬戶管理(1)創(chuàng)建登錄語法為:[EXECUTE]sp_addlogin[@loginame=]'login'[,[@passwd=]'password'][,[@defdb=]'database']第15頁其中:·@loginame='login':登錄名稱?!passw='password':登錄密碼,若不指定則默認為NULL?!defdb='database':登錄后用戶訪問的數(shù)據(jù)庫,若不指定則默認為master數(shù)據(jù)庫。在sp_addlogin中,除了登陸名稱之外,其余選項均為可選項。執(zhí)行sp_addlogin時,必須具有相應(yīng)的權(quán)限。只有sysadmin和securityadmin固定服務(wù)器角色的成員才能執(zhí)行該命令。

第16頁[例4.1]創(chuàng)建用戶,要求如下:創(chuàng)建用戶為victoria,密碼為’p888888’的登錄賬號。創(chuàng)建用戶為u1,密碼為’p888888’的登錄賬號。創(chuàng)建用戶為u2,密碼為’p888888’的登錄賬號。sp_addlogin

‘victoria’,‘p888888'sp_addlogin

‘u1’,‘p888888'sp_addlogin

‘u2’,‘p888888’[例4.2]創(chuàng)建登錄賬號liu,密碼為liusjj999,默認的數(shù)據(jù)庫為orderdb。sp_addlogin'liu','liusjj999','OrderDB'

第17頁(2)修改登錄賬號屬性修改登錄賬號的命令有:修改登錄密碼、修改默認的數(shù)據(jù)庫和刪除賬號。修改登錄密碼語法:sp_password[[@old=]'old_password',]

{[@new=]'new_password'}

[,[@loginame=]'login']第18頁[例4.3]將liu的密碼修改為’p888888’。sp_password'liusjj999','p888888','liu'本例中,'liu'是登錄賬號名稱,'liusjj999'為'liu'原來的密碼,’p888888’是新密碼。(3)修改默認的數(shù)據(jù)庫語法:sp_defaultdb[@loginame=]'login',[@defdb=]'database'[例4.4]將liu訪問的數(shù)據(jù)庫修改為’ScoreDB’。sp_defaultdb'liu','ScoreDB'

第19頁(4)刪除登錄賬號語法:sp_droplogin@loginame='login‘[例4.5]刪除登錄賬號victoria。sp_droplogin'victoria'執(zhí)行上述語句后,'victoria'從登錄用戶中被刪除。第20頁2.用戶管理(1)添加用戶語法:sp_adduser

[@loginame=]'login'[,[@name_in_db=]'user']'其中,'login'是指登錄賬號名稱,'user'是指數(shù)據(jù)庫用戶名稱。[例4.6]為登錄賬號u1添加到OrderDB數(shù)據(jù)庫中,且用戶名為u1。sp_adduseru1,u1[例4.7]為登錄賬號u2添加到OrderDB數(shù)據(jù)庫中,且用戶名為uu2。sp_adduseru2,uu2

第21頁(2)刪除用戶語法:sp_dropuser[@name_in_db=]'user‘[例4.8]從當(dāng)前數(shù)據(jù)庫中刪除賬號u1。sp_dropuseru1

第22頁3.角色管理(1)創(chuàng)建數(shù)據(jù)庫角色語法:sp_addrole[@rolename=]'role'其中:‘role’指數(shù)據(jù)庫角色名稱,以下同義。只有固定服務(wù)器角色sysadmin、db_securityadmin及db_owner的成員才能執(zhí)行該系統(tǒng)存儲過程。[例4.9]建立角色r1和r2。sp_addrole'r1'sp_addrole'r2'

第23頁(2)刪除數(shù)據(jù)庫角色語法:sp_droprole[@rolename=]'role‘[例4.10]刪除數(shù)據(jù)庫角色r2。sp_droprole'r2'

第24頁(3)增加數(shù)據(jù)庫角色成員語法:sp_addrolemember[@rolename=]'role',[@membername=]'security_account'其中:[@rolename=]'role':當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)庫角色的名稱。[@membername=]'security_account':security_account

可以是數(shù)據(jù)庫用戶、數(shù)據(jù)庫角色、Windows登錄或Windows組。只有固定服務(wù)器角色sysadmin及db_owner的成員才能執(zhí)行該系統(tǒng)存儲過程。

第25頁(4)刪除數(shù)據(jù)庫角色成員語法:sp_droprolemember

[@rolename=]'role',[@membername=]'security_account'只有固定服務(wù)器角色sysadmin及db_owner的成員才能執(zhí)行該系統(tǒng)存儲過程。[例4.12]在數(shù)據(jù)庫角色r1中刪除用戶uu2。sp_droprolememberr1,uu2第26頁4.權(quán)限管理(1)管理語句權(quán)限的語法:GRANT/DENY{ALL|command_list}TO{PUBLIC|name_list}REVOKE{ALL|command_list}FROM{PUBLIC|name_list}其中:·command_list:是CREATEDATABASE、CREATEDEFAULT、CREATEFUNCTION、CREATEPROCEDURE、CREATERULE、CREATETABLE、CREATEVIEW、BACKUPDATABASE、BACKUPLOG?!UBLIC:表示所有的用戶?!LL:表示上述所有權(quán)限?!ame_list:用戶名稱,可以將某組權(quán)限同時授予多個用戶,用戶名之間用逗號分割。語義:將對指定操作對象的指定操作權(quán)限授予指定的用戶。第27頁(2)管理對象權(quán)限的語法:GRANT/DENY{ALL|command_list}ON<table_name>[<col_name>,…]TO{PUBLIC|name_list}[WITHGRANTOPTION]REVOKE{ALL|command_list}ON<table_name>[<col_name>,…]FROM{PUBLIC|name_list}第28頁其中:·command_list:包括UPDATE、SELECT、INSERT、DELETE、EXCUTE、ALL?!able_name:數(shù)據(jù)庫對象名?!UBLIC:表示所有的用戶。·ALL:表示上述所有權(quán)限。·WITHGRANTOPTION:將指定的對象權(quán)限授予其它安全賬號的能力。注意:當(dāng)對列授予權(quán)限時,命令項可以包括SELECT和UPDATE或兩者的組合,而在SELECT中若使用了SELECT*則必須對表的所有列賦予SELECT權(quán)限。第29頁[例4.13]分別創(chuàng)建登錄賬號u3,u4,u5,u6,其密碼皆為p888888,并設(shè)置為訂單數(shù)據(jù)庫的用戶。sp_addloginu3,p888888sp_addloginu4,p888888sp_addloginu5,p888888sp_addloginu6,p888888USEOrderDB//打開訂單數(shù)據(jù)庫sp_adduseru3,u3sp_adduseru4,u4sp_adduseru5,u5sp_adduseru6,u6第30頁[例4.14]把查詢Customer表權(quán)限授給用uu2。GRANTSELECTONCustomerTOuu2[例4.15]給u3授予建表和建視圖的權(quán)限。GRANTCREATETABLE,CREATEVIEWTOu3[例4.16]把對Customer表和Employee表的全部權(quán)限授予用戶u3和u4,并具有轉(zhuǎn)授權(quán)限。GRANTALLprivilegesONCustomerTOu3,u4WITHGRANTOPTIONGRANTALLprivilegesONEmployeTOu3,u4WITHGRANTOPTION[例4.17]把用戶u4修改客戶編號的權(quán)限收回。REVOKEUPDATE(customerNo)ONCustomerFROMu4CASCADE第31頁[例4.18]通過角色來實現(xiàn)將一組權(quán)限授予一個用戶。步驟如下:①創(chuàng)建角色jw。sp_addrolejw②給角色jw授予Employee表的SELECT、UPDATE、INSERT權(quán)限。GRANTSELECT,UPDATE,INSERTONEmployeeTOjw③將這個角色授予用戶u5、u6。sp_addrolememberjw,u5sp_addrolememberjw,u6④收回u5的所有權(quán)限。sp_droprolememberjw,u5⑤修改角色jw權(quán)限,增加其刪除DELETE權(quán)限。GRANTDELETEONEmployeeTOjw第32頁5.安全性檢查[例4.19]用戶user04需要在訂單數(shù)據(jù)庫中創(chuàng)建一個視圖ProductView(查詢每種產(chǎn)品的訂購數(shù)量、訂購平均價),并將該視圖的查詢權(quán)限授予用戶user05和user06,請完成該操作。首先在master數(shù)據(jù)庫中創(chuàng)建這三個用戶,并設(shè)置為訂單數(shù)據(jù)庫的用戶。sp_addloginuser04,p888888sp_addloginuser05,p888888

sp_addloginuser06,p888888在OrderDB數(shù)據(jù)庫中加入這三個用戶。sp_adduseruser04,user04sp_adduseruser05,user05sp_adduseruser06,user06第33頁授予user04創(chuàng)建視圖的權(quán)限。grantcreateviewtouser04以user04用戶身份登錄,創(chuàng)建視圖。createviewProductViewasselectproductNo,sum(quantity)qty,avg(quantity*price)/sum(quantity)avgPricefromOrderDetailgroupbyproductNo將ProductView視圖的權(quán)限授予用戶user05和user06。grantselectonProductViewtouser05,user06第34頁[例4.20]用戶user05查詢視圖ProductView。首先以user05身份登錄,然后查詢ProductView視圖。select*fromProductView第35頁4.2.3實驗內(nèi)容1、使用訂單數(shù)據(jù)庫OrderDB完成下面的實驗內(nèi)容:(1)分別創(chuàng)建登錄賬號user01、user02,其密碼皆為p888888,并設(shè)置為訂單數(shù)據(jù)庫OrderDB的用戶。(2)創(chuàng)建登錄賬號login03,并加入到OrderDB數(shù)據(jù)庫中,其用戶名為user03。(3)將員工表的所有權(quán)限授予全部用戶。(4)授予user03用戶對Product表的查詢權(quán)限,對Employee表的編號、名稱的查詢和更新權(quán)限。(5)創(chuàng)建角色r3、r4,將訂單明細表所有列的SELECT權(quán)限、PRICE列的UPDATE權(quán)限授予r3。(6)收回全部用戶對員工表的所有權(quán)限。(7)將user01、user02兩個用戶賦予r3角色。(8)收回user02對訂單明細表所有列的SELECT權(quán)限。

(9)在當(dāng)前數(shù)據(jù)庫中刪除角色r4。(10)授予user01建表和建視圖的權(quán)限,user01用戶分別建立一張表和一個視圖(表和視圖自定),然后將該表和視圖的查詢權(quán)限授予user02和user03。第36頁2、使用訂單數(shù)據(jù)庫OrderDB完成下面的實驗,記錄詳細的操作過程:(1)用戶user07在訂單數(shù)據(jù)庫中創(chuàng)建一張表Table1(內(nèi)容自定)。(2)用戶user02對表Table1和表OrderDetail執(zhí)行了插入和查詢操作(內(nèi)容自定)。(3)用戶user03建立兩張表Table2和Table3和一個視圖View1(內(nèi)容自定),然后將該表和視圖的查詢權(quán)限授予user05和user06,并具有轉(zhuǎn)授權(quán)限。(4)在訂單數(shù)據(jù)庫中創(chuàng)建兩個角色r5和r6,角色r5具有創(chuàng)建表和視圖的權(quán)限,角色r6具有對Customer表的查詢、插入權(quán)限,Employee表的查詢、更新和插入權(quán)限,OrderMaster表的所有權(quán)限。(5)用戶user05將user03用戶創(chuàng)建的表和視圖的查詢權(quán)限授予了用戶user07,user07用戶對表Table2進行了插入操作。(6)user07用戶具有角色r5,同時創(chuàng)建了表Table4(內(nèi)容自定)。第37頁4.3實驗十一

完整性定義與檢查4.3.1實驗?zāi)康呐c要求充分理解關(guān)系數(shù)據(jù)庫中關(guān)于數(shù)據(jù)庫完整性的概念。掌握實體完整性的定義方法。掌握參照完整性定義的方法。掌握用戶自定義完整性的方法。充分理解關(guān)系數(shù)據(jù)庫中關(guān)于數(shù)據(jù)庫完整性的概念。掌握實體完整性檢查方法。掌握參照完整性檢查方法。掌握用戶自定義完整性檢查方法。第38頁4.3.2實驗案例創(chuàng)建表及完整性約束的語法:CREATETABLEtable_name(column_name1datetype[DEFAULTdefault_value][NULL/NOTNULL][CHECKsearch_condition],column_name2datetype......

∶[CONSTRAINTconstrain_name1{UNIQUE/PRIMARYKEY}(colum_name[,colum_name…][ONgroupfile_name])],[CONSTRAINTconstrain_name2FOREIGNKEY(column_name1),[column_name2,…]REFERENCESref_table(ref_column1[,ref_column2,…])],...)ONgroupfile_name)第39頁1.實體完整性約束實體完整性通過設(shè)置主鍵PRIMARYKEY來實現(xiàn),當(dāng)表的主鍵只有一列時,可以在創(chuàng)建表時直接在列后指定PRIMARYKEY,也可以由CONSTRAINT關(guān)鍵字來指定;

當(dāng)表的主鍵多于一列時,必須使用元組級的定義來指定PRIMARYKEY。[例4.21]創(chuàng)建一個客戶表,并為該表建立主鍵約束。CREATETABLECustomer(customerNochar(9),/*客戶編號*/CONSTRAINTCustomerPKPRIMARYKEY(customerNo),customerNamevarchar(40),/*客戶名稱*/telephonevarchar(20),/*客戶電話*/addresschar(40),/*客戶住址*/zipchar(6)/*郵政編碼*/)本例中,主鍵由CONSTRAINT定義并命名為CustomerPK。第40頁由于該表只有一列作為主鍵,所以還可以用下面的方法來定義,但約束名由系統(tǒng)自動定義。CREATETABLECustomer(customerNochar(9)PRIMARYKEY,/*客戶編號*/customerNamevarchar(40),/*客戶名稱*/telephonevarchar(20),/*客戶電話*/addresschar(40),/*客戶住址*/zipchar(6)/*郵政編碼*/)第41頁[例4.22]創(chuàng)建一訂單明細表,為該表建立主鍵約束。CREATETABLEOrderDetail(orderNochar(12),/*訂單編號*/productNochar(9),/*產(chǎn)品編號*/quantityint,/*銷售數(shù)量*/pricenumeric(7,2),/*訂貨單價*/

CONSTRAINTorderdetailpkPRIMARYKEY(orderNo,productNo))本例中,主鍵有兩列構(gòu)成,所以必須定義為元組級的約束,本例由CONSTRAINT來定義主鍵,并為該約束命名為OrderDetailPK。第42頁2.參照完整性約束參照完整性指有些表的列(或列的組合)和其他表的主鍵相關(guān)聯(lián),用戶可以給這個列(或列的組合)定義為FOREIGNKEY,并以REFERENCES關(guān)鍵字設(shè)置它所關(guān)聯(lián)的表及其列組。[例4.24]建立一張訂單主表,要求給該表建立主鍵約束和關(guān)于員工表和客戶表的外鍵約束。CREATETABLEOrderMaster(orderNochar(12)PRIMARYKEY,/*訂單編號*/customerNochar(9),/*客戶號*/salerNochar(8),/*業(yè)務(wù)員編號*/orderDatedatetime,/*訂貨日期*/orderSumnumeric(9,2),/*訂單金額*/invoiceNochar(10),/*發(fā)票號碼*/

CONSTRAINTOrdermasterFK1FOREIGNKEY(customerNo)REFERENCESCustomer(customerNo))本例中,外鍵由CONSTRAINT來定義,并為該約束命名為OrdermasterFK1。第43頁3.用戶自定義完整性約束在建表時,用戶可以根據(jù)應(yīng)用的要求,定義屬性上的約束條件,即屬性限制,包括:列值非空(NOTNULL)、列值唯一(UNIQUE)、檢查是否滿足一個布爾表達式(CHECK短語)、默認值設(shè)置(DEFAULT)等。[例4.26]創(chuàng)建一個客戶表,為該表建立客戶編號約束:編號共9位,第1位為C。CREATETABLECustomer(customerNochar(9)NOTNULLPRIMARYKEY,/*客戶編號*/

CHECK(CustomerNoLIKE'[C][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),customerNamevarchar(40)NOTNULL,/*客戶名稱*/telephonevarchar(20)NOTNULL,/*客戶電話*/addresschar(40)NOTNULL,/*客戶住址*/zipchar(6)NULL/*郵政編碼*/)第44頁[例4.27]建立一張員工表,要求給該表建立各項約束,包括:主鍵約束;性別是‘m’或‘f’;薪水在3000~8000。CREATETABLEEmployee(employeeNochar(8)NOTNULL/*員工編號*/CHECK(EmployeeNoLIKE'[E][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),employeeNamevarchar(10)NOTNULL,/*員工姓名*/sexchar(1)NOTNULL,/*員工性別*/

CONSTRAINTemp_sexchkCHECK(sexIN('m','f')),birthdaydatetimeNULL,/*員工生日*/addressvarchar(50)NULL,/*員工住址*/telephonevarchar(20)NULL,/*員工電話*/hireDatedatetimeNOTNULL,/*雇傭日期*/departmentvarchar(30)NOTNULL,/*所屬部門*/titlevarchar(6)NOTNULL,/*職稱*/salarynumeric(8,2)NOTNULL,/*薪水*/

CONSTRAINTEmployeePKPRIMARYKEY(employeeNo),CONSTRAINTemp_salarychkCHECK(salaryBETWEEN3000AND8000))第45頁[例4.28]建立一張訂單主表,要求發(fā)票號碼唯一。CREATETABLEOrderMaster(orderNochar(12)NOTNULLPRIMARYKEY,/*訂單編號*/customerNochar(9)NOTNULL,/*客戶編號*/salerNochar(8)NOTNULL,/*業(yè)務(wù)員編號*/orderDatedatetimeNOTNULL,/*訂貨日期*/orderSumnumeric(9,2),/*訂單金額*/invoiceNochar(10)NOTNULLUNIQUE,/*發(fā)票號碼*/

CONSTRAINTOrdermasterfk1FOREIGNKEY(customerNo)REFERENCESCustomer(customerNo),CONSTRAINTOrdermasterfk2FOREIGNKEY(salerNo)REFERENCESEmployee(employeeNo))第46頁4.修改約束使用ALTERTABLE語句修改表中的完整性約束。要修改約束,首先必須刪除約束,然后將新的約束加入:刪除約束:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name添加約束:ALTERTABLEtable_nameADDCONSTRAINTconstraint_name<CHECK|UNIQUE|PRIMARYKEY|FOREIGNKEY>(<constraintExpr>)其中,<tableName>為欲修改約束所在的表名;<constraintName>為欲修改的約束名稱。第47頁5.完整性約束檢查(1)當(dāng)插入或?qū)χ鞔a列進行更新操作時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)按照實體完整性規(guī)則自動進行檢查,如果違反了,則進行違約處理。(2)當(dāng)對參照表和被參照表進行更新操作時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)按照參照完整性規(guī)則自動進行檢查,如果違反了,則進行相應(yīng)的違約處理。(3)當(dāng)對關(guān)系表中創(chuàng)建了用戶自定義完整性涉及的列進行更新操作時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)按照用戶自定義完整性規(guī)則自動進行檢查,如果違反了,則進行相應(yīng)的違約處理。

第48頁(1)實體完整性檢查[例4.29]對客戶表插入一個元組('C20200001','南華股份有限公司',,'南昌市','380001')。插入代碼如下:insertCustomervalues('C20200001','南華股份有限公司',,'南昌市','380001')本例中,插入命令提交后,DBMS自動進行實體完整性檢查。由于插入的元組中客戶編號’C20200001’違反了PRIMARYKEY約束,不能在對象Customer中插入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論