第7章 實(shí)現(xiàn)數(shù)據(jù)完整.ppt_第1頁(yè)
第7章 實(shí)現(xiàn)數(shù)據(jù)完整.ppt_第2頁(yè)
第7章 實(shí)現(xiàn)數(shù)據(jù)完整.ppt_第3頁(yè)
第7章 實(shí)現(xiàn)數(shù)據(jù)完整.ppt_第4頁(yè)
第7章 實(shí)現(xiàn)數(shù)據(jù)完整.ppt_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第7章,實(shí)現(xiàn)數(shù)據(jù)完整性,第7章 實(shí)現(xiàn)數(shù)據(jù)完整性,7.1 完整性的概念 7.2使用約束 7.3 使用規(guī)則 7.4 使用默認(rèn) 7.5使用IDENTITY列 7.6案例中的完整性實(shí)現(xiàn),7.1 完整性的概念,1.完整性的概念 數(shù)據(jù)完整性是指存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)正確無(wú)誤,并且相關(guān)數(shù)據(jù)具有一致性。數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否完整,關(guān)系到數(shù)據(jù)庫(kù)系統(tǒng)能否真實(shí)的反映現(xiàn)實(shí)世界。例如,在“學(xué)生”表中學(xué)生的學(xué)號(hào)要具有惟一性,學(xué)生性別只能是男或女,其所在系部、專業(yè)、班級(jí)必須是存在的,否則,就會(huì)出現(xiàn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)與現(xiàn)實(shí)不符的現(xiàn)象。如果數(shù)據(jù)庫(kù)中總存在不完整的數(shù)據(jù),那么它就沒(méi)有存在的必要了,因此實(shí)現(xiàn)數(shù)據(jù)的完整性在數(shù)據(jù)庫(kù)管理系統(tǒng)中十分重

2、要。 2.分類 根據(jù)數(shù)據(jù)完整性機(jī)制所作用的數(shù)據(jù)庫(kù)對(duì)象和范圍不同,數(shù)據(jù)完整性可分 : 實(shí)體完整性 值域完整性 引用完整性 用戶定義完整性,7.1 完整性的概念,(1)實(shí)體完整性 實(shí)體是指表中的記錄,一個(gè)實(shí)體就是表中的一條記錄。實(shí)體完整性要求在表中不能存在完全相同的記錄,而且每條記錄都要具有一個(gè)非空且不重復(fù)的主鍵值。這樣就可以保證數(shù)據(jù)所代表的任何事物都不存在重復(fù)、可以區(qū)分。例如,學(xué)生表中的學(xué)號(hào)必須惟一,并且不能為空,這樣就可以保證學(xué)生記錄的惟一性。實(shí)現(xiàn)實(shí)體完整性的方法主要有主鍵約束、惟一索引、惟一約束和指定IDENTITY屬性。 (2)域完整性 域完整性是指特定列的項(xiàng)的有效性。域完整性要求向表中指

3、定列輸入的數(shù)據(jù)必須具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。例如,假設(shè)現(xiàn)實(shí)中學(xué)生的成績(jī)?yōu)榘俜种?,則在“課程注冊(cè)”表中,對(duì)成績(jī)列輸入數(shù)據(jù)時(shí),不能出現(xiàn)字符,也不能輸入小于0或大于100的數(shù)值。實(shí)現(xiàn)域完整性的方法主要有CHECK約束、外鍵約束、默認(rèn)約束、非空約束、規(guī)則以及在建表時(shí)設(shè)置的數(shù)據(jù)類型。,7.1 完整性的概念,(3)引用完整性 引用完整性又稱為參照完整性。引用完整性是指作用于有關(guān)聯(lián)的兩個(gè)或兩個(gè)以上的表,通過(guò)使用主鍵和外鍵或主鍵和唯一鍵之間的關(guān)系,使表中的鍵值在所有表中保持一致。 實(shí)現(xiàn)引用完整性的方法主要有外鍵約束。 (4)用戶定義的完整性 用戶定義的完整性是應(yīng)用領(lǐng)域需要遵守的約束條件,其允

4、許用戶定義不屬于其他任何完整性分類的特定業(yè)務(wù)規(guī)則。所有的完整性類型都支持用戶定義完整性。,7.2使用約束,1.約束 約束是SQL Server提供的自動(dòng)強(qiáng)制數(shù)據(jù)完整性的一種方法,它是通過(guò)定義列的取值規(guī)則來(lái)維護(hù)數(shù)據(jù)的完整性。 2. 約束的類型: (1)PRIMARY KEY(主鍵)約束 主鍵約束用來(lái)強(qiáng)制數(shù)據(jù)的實(shí)體完整性,它是在表中定義一個(gè)主鍵來(lái)唯一標(biāo)識(shí)表中的每行記錄。主鍵約束有如下特點(diǎn):每個(gè)表中只能有一個(gè)主鍵,主鍵可以是一列,也可以是多列的組合;主鍵值必須唯一并且不能為空,對(duì)于多列組合的主鍵,某列值可以重復(fù),但列的組合值必須唯一。 (2)UNIQUE(唯一)約束 唯一約束用來(lái)強(qiáng)制數(shù)據(jù)的實(shí)體完整性

5、,它主要用來(lái)限制表的非主鍵列中不允許輸入重復(fù)值。唯一約束有如下特點(diǎn):一個(gè)表中可以定義多個(gè)唯一約束;每個(gè)唯一約束可以定義到一列上,也可以定義到多列上;空值可以出現(xiàn)在某列中一次。,7.2使用約束,(3) NOT NULL(非空)約束 非空約束用來(lái)強(qiáng)制數(shù)據(jù)的域完整性,它用于設(shè)定某列值不能為空。如果指定某列不能為空,則在進(jìn)行插入記錄時(shí),此列必須要插入數(shù)據(jù)。 (4)CHECK(檢查)約束 檢查約束用來(lái)強(qiáng)制數(shù)據(jù)的域完整性,它使用邏輯表達(dá)式來(lái)限制表中的列可以接受哪些數(shù)據(jù)值。 (5)DEFAULT(默認(rèn))約束 默認(rèn)約束用來(lái)強(qiáng)制數(shù)據(jù)的域完整性,它為表中某列建立一個(gè)默認(rèn)值,當(dāng)用戶插入記錄時(shí),如果沒(méi)有為該列提供輸入

6、值,則系統(tǒng)會(huì)自動(dòng)將默認(rèn)值賦給該列。默認(rèn)值可以是常量、內(nèi)置函數(shù)或表達(dá)式。使用默認(rèn)約束可以提高輸入記錄的速度。 (6)FOREIGN KEY(外?。┘s束 外鍵是指一個(gè)表中的一列或列組合,它雖不是該表的主鍵,但卻是另一個(gè)表的主鍵。通過(guò)外鍵約束可以為相關(guān)聯(lián)的兩個(gè)表建立聯(lián)系,實(shí)現(xiàn)數(shù)據(jù)的引用完整性,維護(hù)兩表之間數(shù)據(jù)的一致性關(guān)系。,7.2使用約束,3.列約束與表約束 當(dāng)約束被定義于某個(gè)表的一列時(shí)稱為列約束,定義于某個(gè)表的多列時(shí)稱為表約束。當(dāng)一個(gè)約束中必須包含一個(gè)以上的列時(shí),必須使用表約束。 注意: 什么約束可以實(shí)現(xiàn)需要的數(shù)據(jù)完整性:不同的約束提供了不同的功能。 在什么時(shí)候?qū)嵤┘s束最合適:SQL server

7、允許推遲或者禁用某些已經(jīng)定義的約束。,7.2使用約束,4. 創(chuàng)建主建約束 1)使用SQL Server Management Studio 創(chuàng)建 (1)啟動(dòng)SQL Server Management Studio,在“對(duì)象資源管理器”窗口中,依次展開(kāi)數(shù)據(jù)庫(kù)、student、表節(jié)點(diǎn),選擇“教學(xué)計(jì)劃”表,單擊右鍵,在彈出的快捷菜單中選擇“修改”命令,打開(kāi)“表設(shè)計(jì)器”對(duì)話框。 。 (2)在“表設(shè)計(jì)器”對(duì)話框中,選擇需要設(shè)為主鍵的字段,如果需要選擇多個(gè)字段時(shí),可以按住Ctrl鍵,同時(shí)用鼠標(biāo)單擊每個(gè)要選擇的字段。在此,依次選擇課程號(hào)、專業(yè)代碼和專業(yè)學(xué)級(jí)字段。 (3)選好字段后,右鍵單擊選擇的某個(gè)字段,在

8、彈出的快捷菜單中選擇“設(shè)置主鍵”命, (4)執(zhí)行命令后,在作為主鍵的字段前有一個(gè)鑰匙樣圖標(biāo)。也可以 在選擇好字段后,單擊工具欄中的“鑰匙”工具按鈕,設(shè)置主鍵 (5)設(shè)置主鍵完成。,7.2使用約束,7.2使用約束,2)使用查詢分析器創(chuàng)建主鍵 語(yǔ)法: CREATE TABLE TABLE_NAME ( CLOUMN_NAME DATATYPE CONSTRAINT CONSTRAINT_NAME PRIMARY KEY ,N ,CONSTRAINT CONSTRAINT_NAME PRIMARY KEY(COLUMN_NAEM,N) ),定義列級(jí)主鍵約束,定義表級(jí)主鍵約束,7.2使用約束,例: C

9、REATE TABLE S_B (學(xué)號(hào) CHAR(5), 書號(hào) CHAR(5), 借閱時(shí)間 DATATIME, 歸還時(shí)間 DATATIME, CONSTRAINT P_Y PRIMARY KEY (學(xué)號(hào),書號(hào)) 此例題就是建立了一個(gè)表級(jí)主鍵。 在student庫(kù)中,建立一個(gè)民族表(民族代碼,民族名稱),將民族代碼指定為主鍵。 CREATE TABLE 民族 ( 民族代碼char(2)CONSTRAINT pk_mzdm PRIMARY KEY, 民族名稱varchar(30) NOT NULL ) GO 此例題就是建立了一個(gè)列級(jí)主鍵,7.2使用約束,3)在已經(jīng)存在的表中創(chuàng)建主鍵約束: 語(yǔ)法:

10、ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED (column,n) 其中: constraint_name:指主鍵約束名稱。 CLUSTERED:表示在該列上建立聚集索引。 NONCLUSTERED:表示在該列上建立非聚集索引。,7.2使用約束,例: 在student庫(kù)中的課程注冊(cè)表中,指定字段注冊(cè)號(hào)為表的主鍵,其程序清單如下: USE Student GO ALTER TABLE 課程注冊(cè) ADD CONSTRAINT pk_zce PRIMARY KEY CL

11、USTERED (注冊(cè)號(hào)) GO,7.2使用約束,5.UNIQUE約束 當(dāng)表中存在主鍵,為保證其它的字段值也惟一時(shí),應(yīng)該創(chuàng)建惟一約束。一個(gè)表中可以創(chuàng)建多個(gè)惟一約束;惟一約束是一列,也可以是多列的組合;在惟一約束列中,空值可以出現(xiàn)一次。 UNIQUE約束主要是用來(lái)確保不受主鍵約束的列上的數(shù)據(jù)的惟一性。主鍵與UNIQUE約束的區(qū)別主要為: UNIQUE約束,主要用在非主鍵的一列或多列上要求數(shù)據(jù)惟一的情況。 UNIQUE約束,允許該列上存在NULL值,而主鍵決不允許出現(xiàn)這種情況。 可以在一個(gè)表上設(shè)置多個(gè)UNIQUE約束,而在一個(gè)表中只能設(shè)置一個(gè)主鍵約束。,7.2使用約束,1)使用SQL Server

12、 Management Studio創(chuàng)建惟一約束 案例:在student數(shù)據(jù)庫(kù)中,為“系部”表中的“系部名稱”字段創(chuàng)建一個(gè)惟一約束。 (1)在“對(duì)象資源管理器”窗口中,依次展開(kāi)數(shù)據(jù)庫(kù)、student、表節(jié)點(diǎn),右鍵單擊“系部”表,在彈出的快捷菜單中單擊“修改”命令,打開(kāi)“表設(shè)計(jì)器”對(duì)話框。在“表設(shè)計(jì)器”中,右鍵單擊任意字段,在彈出的快捷菜單中單擊“索引/鍵”命令,打開(kāi)“索引/鍵”對(duì)話框。 (2)單擊“添加”命令按鈕,系統(tǒng)給出系統(tǒng)默認(rèn)的惟一約束名:“IX_系部”,顯示在“選定的主/惟一或索引”列表框中,單擊選中惟一約束名“IX_系部”,在其右側(cè)的“屬性”窗口中,可以修改約束名稱,設(shè)置約束列等。 (

13、3)單擊“屬性”窗口中“常規(guī)”中的“列”屬性,在其右側(cè)出現(xiàn)“”按鈕,單擊該按鈕,打開(kāi)“索引列”對(duì)話框,在列名下拉列表框中選擇“系部名稱”,在排序順序中選擇“降序”,設(shè)置創(chuàng)建惟一約束的列名。 (4)設(shè)置完成后,單擊“確定”按鈕,回到“索引/鍵”對(duì)話框,修改“常規(guī)”屬性中“是惟一的”屬性值為“是”,最后,關(guān)閉“索引/鍵”對(duì)話框和“表設(shè)計(jì)器”對(duì)話框,保存設(shè)置,完成惟一約束創(chuàng)建。,7.2使用約束,2)使用T-SQL創(chuàng)建UNIQUE約束 語(yǔ)法格式: CREATE TABLE TABLE_NAME ( CLOUMN_NAME DATATYPE CONSTRAINT UNIQUE _NAME UNIQUE

14、,N ,CONSTRAINT UNIQUE _NAME UNIQUE(COLUMN_NAEM,N) ),定義列級(jí)UNIQUE約束,定義表級(jí)UNIQUE約束,7.2使用約束,案 例:創(chuàng)建一個(gè)表級(jí)的UNIQUE約束 CREATE TABLE test ( 編號(hào) int CONSTRAINT PRIMARY KEY, 名稱 char(20), 類型 char(20), 時(shí)間 datetime, CONSTRAINT uniq_event UNIQUE (類型,時(shí)間) ) GO,7.2使用約束,3)為存在的表創(chuàng)建惟一約束,其語(yǔ)法格式如下: ALTER TABLE table_name ADD CONS

15、TRAINT unique_name UNIQUE CLUSTERED|NONCLUSTERED (column,n) 案例:在student庫(kù)中,為“民族”表中的“民族名稱”字段創(chuàng)建一個(gè)惟一約 束。其程序清單如下: ALTER TABLE 民族 ADD CONSTRAINT uk_mzmz UNIQUE NONCLUSTERED (民族名稱 ) GO,7.2使用約束,6. CHECK約束 CHECK(核查)約束通過(guò)檢查輸入表列的數(shù)據(jù)的值來(lái)維護(hù)值域的完整性。核查約束通過(guò)對(duì)一個(gè)邏輯表達(dá)式的結(jié)果進(jìn)行判斷來(lái)對(duì)數(shù)據(jù)進(jìn)行核查。 注意: 可以在一列上設(shè)置多個(gè)核查約束,也可以將一個(gè)核查約束應(yīng)用 于多列。當(dāng)一

16、列受多個(gè)核查約束控制時(shí),所有的約束按照創(chuàng)建 的順序,依次進(jìn)行數(shù)據(jù)有效性的核查。 一般來(lái)說(shuō),可以在下面兩種情況下,設(shè)置核查約束無(wú)效: 在執(zhí)行INSERT語(yǔ)句或UPDATE語(yǔ)句過(guò)程:事先知道對(duì)數(shù)據(jù)的增 加或修改將違反核查約束的規(guī)定,但這些操作又是必須的。 在復(fù)制進(jìn)行時(shí),在進(jìn)行不同服務(wù)器間的復(fù)制操作的過(guò)程中,由于 兩個(gè)服務(wù)器之間設(shè)置的核查約束不一致,如果不事先 使核查約束 無(wú)效,則有可能使某些數(shù)據(jù)無(wú)法進(jìn)行復(fù)制。,7.2使用約束,1)使用T-SQL語(yǔ)句為已存在的表創(chuàng)建檢查約束,其語(yǔ)法格式如下: ALTER TABLE table_name Column_name column_definition C

17、HECK NOT FOR REPLICATION (check_criterial) |WITH CHECK|WITH NOCHECK ADD CONSTRAINT constraint_name CHECK (logical_expression),N 案例:在student庫(kù)中,為學(xué)生表的出生日期列創(chuàng)建一個(gè)檢查約束,以 保證輸入的數(shù)據(jù)大于1950年1月1日而小于當(dāng)天的日期。 ALTER TABLE 學(xué)生 ADD CONSTRAINT ck_csrq CHECK(出生日期01/01/1950 AND 出生日期GETDATE() ) GO,添加新列的同時(shí),添加核查約束,在已經(jīng)存在的列上添加核查

18、約束,7.2使用約束,案例:在student數(shù)據(jù)庫(kù)中,為“課程注冊(cè)”表中的“成績(jī)”字段創(chuàng)建一個(gè)檢查約束,以保證輸入的學(xué)生成績(jī)符合百分制要求,即在0100之間。 USE student GO ALTER TABLE 課程注冊(cè) ADD CONSTRAINT ck_cj CHECK(成績(jī)=0 AND 成績(jī)=100 ) GO,7.2使用約束,7.默認(rèn)約束 用戶在輸入數(shù)據(jù)時(shí),如果沒(méi)有給某列賦值,該列的默認(rèn)約束將自動(dòng)為該列指定默認(rèn)值。默認(rèn)值可以是常量、內(nèi)置函數(shù)或表達(dá)式。使用默認(rèn)約束可以提高輸入記錄的速度。 1)使用SQL Server Management Studio創(chuàng)建默認(rèn)約束 案例: 在studen

19、t數(shù)據(jù)庫(kù)中,為“教學(xué)計(jì)劃”表的“課程類型”字段創(chuàng)建默認(rèn)值,其默認(rèn)值為“公共必修”。其操作步驟如下: (1)啟動(dòng)SQL Server Management Studio,在“對(duì)象資源管理器”窗口中,依次展開(kāi)數(shù)據(jù)庫(kù)、student、表節(jié)點(diǎn)。 (2)右鍵單擊“教學(xué)計(jì)劃”表,在彈出的快捷菜單中選擇“修改”命令,打開(kāi)“表設(shè)計(jì)器”對(duì)話框,如課本圖7.2所示。 (3)單擊需要設(shè)置默認(rèn)的列(如:課程類型),在下面列屬性設(shè)置欄的“默認(rèn)值或綁定”選項(xiàng)對(duì)應(yīng)的輸入框中,輸入默認(rèn)值即可(如:公共必修)。 (4)設(shè)置完成后,關(guān)閉表設(shè)計(jì)器。,7.2使用約束,2)使用T-SQL語(yǔ)句為已存在的表創(chuàng)建默認(rèn)約束,語(yǔ)法格式如下: A

20、LTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name 其中: table_name:需要建立默認(rèn)約束的表名。 constraint_name:默認(rèn)約束名稱。 constant_expression:默認(rèn)值。 案例:在STUDENT數(shù)據(jù)庫(kù)的“教師”表上,為“學(xué)歷”字段創(chuàng)建一個(gè)默認(rèn)約束,其默認(rèn)值為本科。其程序清單如下: ALTER TABLE 教師 ADD CONSTRAINT df_xueli DEFAULT 本科 FOR 學(xué)歷 GO,7.2使用約束,8.外

21、鍵約束 外鍵主要用來(lái)維護(hù)兩個(gè)表之間的一致性關(guān)系。外鍵的建立主要是通過(guò)將一個(gè)表中的主鍵所在列包含在另一個(gè)表中,這些列就是另一個(gè)表的外鍵。 外鍵約束不僅可以與另一張表上的主鍵約束建立聯(lián)系,也可以與另一張表上的UNIQUE約束建立聯(lián)系。 外鍵約束上允許存在為NULL的值,則針對(duì)該列的外鍵約束核查將被忽略。 外鍵同時(shí)也限制了對(duì)主鍵所在表的數(shù)據(jù)進(jìn)行修改。當(dāng)主鍵所在的表的數(shù)據(jù)被另一張表的外鍵所引用時(shí),用戶將無(wú)法對(duì)主鍵里的數(shù)據(jù)進(jìn)行修改或刪除。除非事先刪除或修改引用的數(shù)據(jù)。 當(dāng)一個(gè)新的數(shù)據(jù)加入到表格中,或?qū)Ρ砀裰幸呀?jīng)存在的外鍵上的數(shù)據(jù)進(jìn)行修改時(shí),新的數(shù)據(jù)必須存在于另一張表的主鍵上。,7.2使用約束,1)使用S

22、QL Server Management Studio創(chuàng)建外鍵約束 案例:在student數(shù)據(jù)庫(kù)中,為“學(xué)生”表的“班級(jí)代碼”列創(chuàng)建外鍵約束,從而保證在“學(xué)生”表中輸入有效的“班級(jí)代碼”。其操作步驟如下: (1)啟動(dòng)SQL Server Management Studio,在“對(duì)象資源管理器”窗口中,依次展開(kāi)數(shù)據(jù)庫(kù)、student、表節(jié)點(diǎn)。 (2)右鍵單擊 “學(xué)生”表,在彈出的快捷菜單中選擇“修改”命令,打開(kāi)“表設(shè)計(jì)器”對(duì)話框。在“表設(shè)計(jì)器”中,右鍵單擊任意字段,在彈出的快捷菜單中單擊“關(guān)系”命令,打開(kāi)“外鍵關(guān)系”對(duì)話框。 (3)單擊“添加”命令按鈕,系統(tǒng)給出默認(rèn)的外鍵約束名:“FK_學(xué)生_學(xué)

23、生”,顯示在“選定的關(guān)系”列表中。 (4)單擊“FK_學(xué)生_學(xué)生”外鍵約束名,在其右側(cè)的“屬性”窗口中單擊“表和列規(guī)范”屬性,然后,再單擊該屬性右側(cè)的“”按鈕,打開(kāi)“表和列”對(duì)話框,如圖7.7所示。 (5)在“表和列”對(duì)話框中,修改外鍵的名稱,選擇主鍵表及表中的主鍵,以及外鍵表中的外鍵,修改后結(jié)果如圖7.7所示。單擊“確定”命令按鈕,回到“外鍵關(guān)系”對(duì)話框,如圖7.8所示。 (6)單擊“關(guān)閉”按鈕,完成外鍵的設(shè)置。,7.2使用約束,2)使用T-SQL創(chuàng)建外鍵 語(yǔ)法格式: CREATE TABLE table_name ( column_name column_definition CONSTR

24、AINT constraint_name FOREIGN KEY REFERENCES ref_table(ref_column) ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION NOT FOR REPLICATION ,N CONSTRAINT foreignkey_name FOREIGN KEY (column,n) REFERENCES ref_table(ref_column) NOT FOR REPLICATION ,N ),ON DELETE CASCADE|NO ACTION 表示在刪除與外鍵相對(duì)應(yīng)的主鍵所在的行時(shí)

25、,級(jí)聯(lián)刪除(cascade)外鍵所在的行的數(shù)據(jù)或者不做任何操作 (no action) ON update CASCADE|NO ACTION 表示在刪除與外鍵相對(duì)應(yīng)的主鍵所在的行時(shí),級(jí)聯(lián)修改(cascade)外鍵所在的行的數(shù)據(jù)或者不做任何操作 (no action),7.2使用約束,案例:創(chuàng)建外鍵約束 create table test1 (pub_id varchar(20) primary key, pub_name varchar(50), address varchar(20), city varchar(10), state char(2), country char(10) )

26、go create table test2 (author_id varchar(20) primary key, author_name varchar(50), phone varchar(20), zipcode char(10) ),案例:創(chuàng)建外鍵約束 create table test3 ( title_id int primary key title_name varchar(50), author_id varchar(20) constraint for_auid foreign key references test2(author_id) on delete cascade

27、 not for replication, pub_id varchar(20) constraint for_pubid foreign key references test1(pub_id) not for replication, ),7.2使用約束,3)創(chuàng)建外鍵約束-在已經(jīng)存在的表上創(chuàng)建外鍵約束 語(yǔ)法: ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name,) REFERENCES ref_table ( ref_column_name, ) 案例:在student庫(kù)的班級(jí)表上,為

28、專業(yè)代碼字段創(chuàng)建一個(gè)外鍵約束,從而保證 輸入有效的專業(yè)代碼。其程序清單如下: ALTER TABLE 班級(jí) ADD CONSTRAINT fk_zydm FOREIGN KEY (專業(yè)代碼) REFERENCES 專業(yè)(專業(yè)代碼) GO,7.2使用約束,9.查看約束的相關(guān)屬性 1)使用SQL Server Management Studio查看約束 使用SQL Server Management Studio查看約束信息的步驟為: (1)在SQL Server Management Studio環(huán)境中,選擇要查看約束的表單擊右鍵,打開(kāi)表設(shè)計(jì)器。 (2)在表設(shè)計(jì)器中可以查看主鍵約束、空值約束和默

29、認(rèn)值約束。 (3)在表設(shè)計(jì)器中,右鍵單擊任意字段,從彈出的快捷菜單中選擇相關(guān)約束命令,如“關(guān)系、索引/鍵、CHECK約束”等,進(jìn)入相關(guān)約束對(duì)話框,查看外鍵約束、惟一約束和CHECK約束信息。 2)使用系統(tǒng)存儲(chǔ)過(guò)程查看約束信息 系統(tǒng)存儲(chǔ)過(guò)程sp_help用來(lái)查看約束的名稱、創(chuàng)建者、類型和創(chuàng)建時(shí)間,其語(yǔ)法格式為: EXEC sp_help 約束名稱 如果約束存在文本信息,可以使用sp_helptext來(lái)查看,其語(yǔ)法格式為: EXEC sp_helptext 約束名稱,7.2使用約束,案例:使用系統(tǒng)存儲(chǔ)過(guò)程查看“學(xué)生”表上的ck_cj約束信息。代碼如下: USE student GO EXEC sp

30、_help ck_cj EXEC sp_helptext ck_cj GO 在查詢編輯器中執(zhí)行以上代碼,結(jié)果如圖所示。,7.2使用約束,10.刪除定義在表上的約束,可以在SQL Server Management Studio中完成,也可以在修改表的命令中使用DROP命令刪除約束。 1)使用SQL Server Management Studio刪除約束 使用SQL Server Management Studio刪除各種約束十分方便,在表設(shè)計(jì)器的窗口中,可以移除主鍵,修改非空,去掉默認(rèn)值。在表設(shè)計(jì)器中,右鍵單擊任意字段,從彈出的快捷菜單中選擇相關(guān)約束命令,如“關(guān)系、索引/鍵、CHECK約束”

31、等,進(jìn)入相關(guān)約束對(duì)話框,選中約束,單擊“刪除”按鈕,即可將相應(yīng)的約束刪除。,7.2使用約束,2)使用DROP命令刪除表約束 在查詢編輯器中,也可以方便的刪除一個(gè)或多個(gè)約束,其語(yǔ)法格式為: ALTER TABLE table_name DROP CONSTRAINT constraint_name,n 案例:刪除學(xué)生表中的fk_學(xué)生_班級(jí)、ck_csrq約束。代碼如下: USE student GO ALTER TABLE 學(xué)生 DROP CONSTRAINT fk_學(xué)生_班級(jí),ck_csrq GO,7.2使用約束,3)刪除主鍵約束 語(yǔ)法:ALTER TABLE table_name DROP

32、CONSTRAINT PRIMARYKEY_NAME 例: ALTER TABLE S_B DROP CONSTRAINT P_Y 瀏覽指定表中的主鍵信息: SP_PKEYS table_name,7.2使用約束,4)刪除UNIQUE約束 為存在惟一約束的表中刪除惟一約束,其語(yǔ)法格式如下: ALTER TABLE table_name DROP CONSTRAINT unique_name 案例:在student庫(kù)中,為“民族”表中的“民族名稱”字段刪除惟一約 束。其程序清單如下: ALTER TABLE 民族 DROP CONSTRAINT uk_mzmz GO,7.2使用約束,5)刪除CH

33、ECK約束 使用SQL語(yǔ)句將已存在核查約束刪除,其語(yǔ)法格式如下: ALTER TABLE table_name DROP check_name 可以使用下面的語(yǔ)法使所有的約束或指定的約束無(wú)效: ALTER TABLE table_name CHECK | NOCHECK CONSTRAINT ALL | CONSTRAINT_NAME ,N 案例:使pubs數(shù)據(jù)庫(kù)中authors表上的所有約束無(wú)效 ALTER TABLE authors NOCHECK CONSTRAINT ALL GO,7.3 使用規(guī)則,1.規(guī)則:規(guī)則是一種數(shù)據(jù)庫(kù)對(duì)象,它的作用與CHECK約束相同,用來(lái)限制輸入值的取值范圍,

34、實(shí)現(xiàn)數(shù)據(jù)的域完整性。 2.規(guī)則與CHECK比較 規(guī)則是一種數(shù)據(jù)庫(kù)對(duì)象,它的作用與CHECK約束相同,用來(lái)限制輸入值的取值范圍,實(shí)現(xiàn)強(qiáng)制數(shù)據(jù)的域完整性。 規(guī)則與CHECK約束相比較,CHECK約束比規(guī)則更簡(jiǎn)明,它可以在建表時(shí)由CREATE TABLE語(yǔ)句將其作為表的一部分進(jìn)行指定,而規(guī)則需要單獨(dú)創(chuàng)建,然后綁定到列上。 在一個(gè)列上只能應(yīng)用一個(gè)規(guī)則,但是卻可以應(yīng)用多個(gè)CHECK約束。 一個(gè)規(guī)則只需定義一次就可以被多次應(yīng)用,可以應(yīng)用于多個(gè)表或多個(gè)列,還可以應(yīng)用到用戶定義的數(shù)據(jù)類型上。而CHECK則不能。,7.3 使用規(guī)則,3.使用T-SQL語(yǔ)句管理規(guī)則(創(chuàng)建、綁定、解綁、刪除) 1)創(chuàng)建規(guī)則 規(guī)則是一

35、種數(shù)據(jù)庫(kù)對(duì)象,在使用之前需要被創(chuàng)建。 語(yǔ)法:CREATE RULE rule_name AS condition_expression 其中: rule_name 指規(guī)則對(duì)象的名稱,其必須符合命名規(guī)則 condition_expression 條件表達(dá)式 例:CREATE RULE xb_rule AS xb in(男, 女) GO,7.3 使用規(guī)則,2)綁定規(guī)則 創(chuàng)建好的規(guī)則,必須綁定到列或用戶定義的數(shù)據(jù)類型上才能夠起作用。使用系統(tǒng)存儲(chǔ)過(guò)程將規(guī)則綁定到字段或用戶定義的數(shù)據(jù)類型上。 語(yǔ)法: EXEC sp_bindrule 規(guī)則名稱, 表名.字段名 例: EXEC sp_bindrule xb

36、_rule, 教師.性別 3)解綁 如果某個(gè)字段不再需要規(guī)則對(duì)其輸入的數(shù)據(jù)進(jìn)行限制,應(yīng)該將規(guī)則從該字段上去掉,即解綁。 語(yǔ)法: EXEC sp_unbindrule 表名.字段名 4)刪除規(guī)則 如果規(guī)則沒(méi)有存在價(jià)值,可以將其刪除。在刪除之前,應(yīng)該對(duì)規(guī)則解綁,當(dāng)規(guī)則不再應(yīng)用與任何表時(shí),可以刪除。 語(yǔ)法:DROP RULE 規(guī)則名稱,n,7.4 使用默認(rèn)值,1.默認(rèn)(也稱默認(rèn)值): 是一種數(shù)據(jù)庫(kù)對(duì)象,它與DEFAULT(默認(rèn))約束的作用相同,也是當(dāng)向表中輸入記錄時(shí),沒(méi)有為某列提供輸入值,如果該列被綁定了默認(rèn)對(duì)象,系統(tǒng)會(huì)自動(dòng)將其值賦給該列。 與DEFAULT約束不同的是默認(rèn)對(duì)象的定義獨(dú)立于表,其定義

37、一次就可以被多次應(yīng)用于任意表中的一列或多列,也可以應(yīng)用于用戶定義的數(shù)據(jù)類型。 默認(rèn)對(duì)象的使用方法同規(guī)則相似,包含默認(rèn)的創(chuàng)建、綁定、解綁和刪除。這些操作既可以在查詢分析器中完成,也可以在企業(yè)管理器中完成。,7.4 使用默認(rèn)值,2.使用默認(rèn) 1)創(chuàng)建默認(rèn)值 在查詢分析器中,創(chuàng)建默認(rèn)對(duì)象的語(yǔ)法格式如下: CREATE DEFAULT default_name AS default_description 其中: default_name:指默認(rèn)值名稱,其必須符合SQL Server的標(biāo)識(shí)符命名規(guī)則。 default_description:常量表達(dá)式,可以包含常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。 2)綁定默

38、認(rèn)值 默認(rèn)對(duì)象建立以后,必須將其綁定到表字段或用戶定義的數(shù)據(jù)類型上才能起作用。在查詢分析器中使用系統(tǒng)存儲(chǔ)過(guò)程來(lái)完成綁定,其語(yǔ)法格式為: EXECUTE sp_bindefault 默認(rèn)名稱,表名.字段名,7.4 使用默認(rèn)值,案例:創(chuàng)建一個(gè)df_xuefen 默認(rèn),將其綁定到“教學(xué)計(jì)劃”表的“學(xué)分”字段,使其默認(rèn)學(xué)分為4,其程序清單如下: USE STUDENT GO CREATE DEFAULT def_xuefen AS 4 GO EXEC sp_bindefault def_xuefen,教學(xué)計(jì)劃.學(xué)分 GO,7.4 使用默認(rèn)值,3)解綁默認(rèn)值 對(duì)于表中的字段,如果認(rèn)為其默認(rèn)值沒(méi)有存在的必

39、要時(shí),可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_unbindefault解除其綁定的默認(rèn)值,其語(yǔ)法格式為: EXECUTE sp_unbindefault 表名.字段名 4)刪除默認(rèn)值 當(dāng)默認(rèn)值不再有用時(shí),可以將其刪除。刪除默認(rèn)值之前,必須將其從表中解綁。在查詢分析器中使用DROP語(yǔ)句刪除默認(rèn)值,語(yǔ)法如下: DROP DEFAULT default_name,n 案例:從STUDENT數(shù)據(jù)庫(kù)中刪除def_xuefen默認(rèn)值,程序清單如下: USE STUDENT GO EXEC sp_unbindefault 教學(xué)計(jì)劃.學(xué)分 GO DROP DEFAULT def_xuefen GO,7.5使用IDENTIT

40、Y列,1. IDENTITY列 IDENTITY列是表中的一個(gè)字段,該字段的值不由用戶輸入,而是當(dāng)用戶為表添加新記錄時(shí),由系統(tǒng)按照某種規(guī)律自動(dòng)為新增加的記錄中的該列設(shè)置一個(gè)惟一的行序列號(hào)。在一個(gè)表中只能有一個(gè)IDENTITY列,并且其值是由系統(tǒng)提供的不重復(fù)的值,因此可用它來(lái)實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性。IDENTITY列的數(shù)據(jù)類型可以是任何整數(shù)類型,也可以是decimal或 numeric數(shù)據(jù)類型,但是使用這樣的數(shù)據(jù)類型時(shí),不允許出現(xiàn)小數(shù)。 創(chuàng)建IDENTITY列需要涉及兩個(gè)參數(shù):標(biāo)識(shí)種子和標(biāo)識(shí)增量。標(biāo)識(shí)種子是標(biāo)識(shí)列的起始值,標(biāo)識(shí)增量是每次增加的數(shù)。例如:設(shè)置一個(gè)種子值為1,增量為2,則該列的值依次為

41、1、3、5、7。,7.5使用IDENTITY列,2.使用SQL Server Management Studio創(chuàng)建IDENTITY列 在student數(shù)據(jù)庫(kù),修改“課程”表,為其增加一個(gè)IDENTITY列,種子值為100,增量為1。步驟如下: (1)啟動(dòng)SQL Server Management Studio中,在“對(duì)象資源管理器”窗口中,依次展開(kāi)“數(shù)據(jù)庫(kù)”、“student”、“表”節(jié)點(diǎn)。 (2)右鍵單擊“課程”表,在彈出的快捷菜單中單擊“修改”命令,打開(kāi)“表設(shè)計(jì)器”。 (3)在“表設(shè)計(jì)器”中,添加一列,列名為ID,數(shù)據(jù)類型為int,然后,在表設(shè)計(jì)器下面展開(kāi)“標(biāo)識(shí)規(guī)范”,設(shè)置“是標(biāo)識(shí)”屬性

42、值為“是”,修改“標(biāo)識(shí)種子”屬性值為“100”,“標(biāo)識(shí)增量”屬性值為“1”,這樣即可創(chuàng)建一個(gè)IDENTITY列。 (4)保存設(shè)置,完成IDENTITY列創(chuàng)建,7.5使用IDENTITY列,3.使用T-SQL語(yǔ)句創(chuàng)建IDENTITY列 使用T-SQL語(yǔ)句在CREATE TABLE或 ALTER TABLE 時(shí)都可以創(chuàng)建IDENTITY列,其語(yǔ)法格式為: IDENTITY (標(biāo)識(shí)種子,標(biāo)識(shí)增量) 案例:在student數(shù)據(jù)庫(kù),創(chuàng)建“學(xué)生選課”表,在其中創(chuàng)建IDENTITY列,種子值為1,增量也為1。代碼如下: USE student GO CREATE TABLE 學(xué)生選課 (注冊(cè)號(hào) INT ID

43、ENTITY(1,1) PRIMARY KEY NOT NULL, 學(xué)號(hào) char(12) NOT NULL, 課程號(hào) char(4) NOT NULL, 教師編號(hào)char(12) NOT NULL, 選課類型char(4) NULL, 成績(jī) tinyint NULL, 學(xué)分 tinyint NULL ) GO,7.5使用IDENTITY列,注意: 在每個(gè)表里最多只能有一個(gè)Identity列,該列不允許為空,也不允許設(shè)置默認(rèn)值。 Identity列也需要有數(shù)據(jù)類型,建議使用以下數(shù)據(jù)類型:decimal int numeric smallint tinyint 當(dāng)表中的數(shù)據(jù)行數(shù)目達(dá)到了規(guī)定的上界

44、或下界時(shí),就不能再向表中插入數(shù)據(jù)。因?yàn)榉?wù)器不會(huì)自動(dòng)去尋找因?yàn)閯h除而沒(méi)有使用的Identity列的值。 一般情況下,不允許向人為的向Identity列中插入數(shù)值,所以在插入時(shí),必須寫明列清單。,7.6案例中的完整性實(shí)現(xiàn),1使用約束 (1)用T-SQL語(yǔ)句為“教學(xué)計(jì)劃”表設(shè)定主鍵,主鍵由課程號(hào)、專業(yè)代碼和專業(yè)學(xué)級(jí)三個(gè)字段組成,其名稱為pk_kzx。代碼如下: USE student GO ALTER TABLE 教學(xué)計(jì)劃 ADD CONSTRAINT pk_kzx PRIMARY KEY CLUSTERED (課程號(hào),專業(yè)代碼,專業(yè)學(xué)級(jí)) GO,7.6案例中的完整性實(shí)現(xiàn),1使用約束 (2)用T-

45、SQL語(yǔ)句為“系部”表中的系部名稱字段設(shè)置惟一約束,其名稱為uk_xbmz。代碼如下: USE student GO ALTER TABLE 系部 ADD CONSTRAINT uk_xbmz UNIQUE NONCLUSTERED (系部名稱 ) GO,7.6案例中的完整性實(shí)現(xiàn),1使用約束 (3)用T-SQL語(yǔ)句為“專業(yè)”表中的系部代碼字段添加名稱為ck_xbdm檢查約束,使該字段輸入值只能是01、02、03、04。代碼如下: USE student GO ALTER TABLE 專業(yè) ADD CONSTRAINT ck_xbdm CHECK (系部代碼 IN(01,02,03, 04) GO,7.6案例中的完整性實(shí)現(xiàn),1使用約束 (4)用T-SQL語(yǔ)句將“教師”表中的學(xué)歷字段的默認(rèn)值設(shè)置為“研究生”。代碼如下: USE student GO ALTER TABLE 教師 ADD CONSTRAINT def_xueli DEFAULT 研究生 FOR 學(xué)歷 GO,7.6案例中的完整性實(shí)現(xiàn),1使用約束 (5)用T-SQL語(yǔ)句在“專業(yè)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論