版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SQL ServerSQL Server實用教程實用教程Page 12021年年12月月13日星期一日星期一q51 數(shù)據(jù)完整性的基本概念數(shù)據(jù)完整性的基本概念q52 約束約束q53 默認值默認值 q54 規(guī)則規(guī)則q55 標識列標識列IDENTITYq56 自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型SQL ServerSQL Server實用教程實用教程Page 22021年年12月月13日星期一日星期一q教學要求:通過本章學習,讀者應掌握以下內容:教學要求:通過本章學習,讀者應掌握以下內容:v使用各種約束保證數(shù)據(jù)庫的完整性使用各種約束保證數(shù)據(jù)庫的完整性v使用規(guī)則、默認值來保證數(shù)據(jù)完整性使用規(guī)則、默認值來保證數(shù)
2、據(jù)完整性v對實現(xiàn)數(shù)據(jù)完整性的各種方法進行分析對實現(xiàn)數(shù)據(jù)完整性的各種方法進行分析SQL ServerSQL Server實用教程實用教程Page 32021年年12月月13日星期一日星期一q 數(shù)據(jù)完整性包括實體完整性、域完整性、參照完整性和用數(shù)據(jù)完整性包括實體完整性、域完整性、參照完整性和用戶定義的完整性。戶定義的完整性。 q 1實體完整性(實體完整性(Entity Integrity)q 實體完整性用于保證數(shù)據(jù)庫中數(shù)據(jù)表的每一個特定實體都實體完整性用于保證數(shù)據(jù)庫中數(shù)據(jù)表的每一個特定實體都是唯一的。它可以通過主鍵約束(是唯一的。它可以通過主鍵約束(PRIMARY KEY)、)、唯一鍵約束(唯一鍵
3、約束(UNIQUE)、索引或標識屬性)、索引或標識屬性(IDENTITY)來實現(xiàn)。)來實現(xiàn)。q 2域完整性域完整性(Domain Integrity)q 域完整性就是保證數(shù)據(jù)庫中的數(shù)據(jù)取值的合理性,即保證域完整性就是保證數(shù)據(jù)庫中的數(shù)據(jù)取值的合理性,即保證指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型、格式和有效的數(shù)據(jù)范指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型、格式和有效的數(shù)據(jù)范圍。通過為表的列定義數(shù)據(jù)類型以及檢查約束圍。通過為表的列定義數(shù)據(jù)類型以及檢查約束(CHECK)、默認定義()、默認定義(DEFAULT)、非空()、非空(NOT NULL)和規(guī)則實現(xiàn)限制數(shù)據(jù)范圍,保證只有在有效范圍)和規(guī)則實現(xiàn)限制數(shù)據(jù)范圍,保證只
4、有在有效范圍內的值才能存儲到列中。內的值才能存儲到列中。SQL ServerSQL Server實用教程實用教程Page 42021年年12月月13日星期一日星期一q 3參照完整性參照完整性(Referential Integrity)q 參照完整性定義了一個關系數(shù)據(jù)庫中,不同的表中列之間參照完整性定義了一個關系數(shù)據(jù)庫中,不同的表中列之間的關系(父鍵與外鍵)。要求一個表中(子表)的一列或的關系(父鍵與外鍵)。要求一個表中(子表)的一列或列組合的值必須與另一個表(父表)中的相關一列或列組列組合的值必須與另一個表(父表)中的相關一列或列組合的值相匹配。被引用的列或列組合稱為父鍵,父鍵必須合的值相匹
5、配。被引用的列或列組合稱為父鍵,父鍵必須是主鍵或唯一鍵,通常父鍵為主鍵,主鍵表是主表。是主鍵或唯一鍵,通常父鍵為主鍵,主鍵表是主表。q 引用父鍵的一列或列組合稱為外鍵,外鍵表是子表。如果引用父鍵的一列或列組合稱為外鍵,外鍵表是子表。如果父鍵和外鍵屬于同一個表,則稱為自參照完整性。子表的父鍵和外鍵屬于同一個表,則稱為自參照完整性。子表的外鍵必須與主表的主鍵相匹配,只要依賴某一主鍵的外鍵外鍵必須與主表的主鍵相匹配,只要依賴某一主鍵的外鍵存在,主表中包含該主鍵的行就不能被刪除。存在,主表中包含該主鍵的行就不能被刪除。q 當增加、修改或刪除數(shù)據(jù)庫表中記錄時,可以借助參照完當增加、修改或刪除數(shù)據(jù)庫表中記
6、錄時,可以借助參照完整性來保證相關聯(lián)表之間數(shù)據(jù)的一致性。整性來保證相關聯(lián)表之間數(shù)據(jù)的一致性。SQL ServerSQL Server實用教程實用教程Page 52021年年12月月13日星期一日星期一q4用戶定義的完整性用戶定義的完整性(User-defined Integrity)q這是由用戶定義的完整性。用戶可以根據(jù)自己的這是由用戶定義的完整性。用戶可以根據(jù)自己的業(yè)務規(guī)則定義不屬于任何完整性分類的完整性。業(yè)務規(guī)則定義不屬于任何完整性分類的完整性。由于每個用戶的數(shù)據(jù)庫都有自己獨特的業(yè)務規(guī)則,由于每個用戶的數(shù)據(jù)庫都有自己獨特的業(yè)務規(guī)則,所以系統(tǒng)必須有一種方式來實現(xiàn)定制的業(yè)務規(guī)則,所以系統(tǒng)必須有
7、一種方式來實現(xiàn)定制的業(yè)務規(guī)則,即定制的數(shù)據(jù)完整性約束。即定制的數(shù)據(jù)完整性約束。q用戶定義的完整性可以通過自定義數(shù)據(jù)類型、規(guī)用戶定義的完整性可以通過自定義數(shù)據(jù)類型、規(guī)則、存儲過程和觸發(fā)器來實現(xiàn)。則、存儲過程和觸發(fā)器來實現(xiàn)。SQL ServerSQL Server實用教程實用教程Page 62021年年12月月13日星期一日星期一q 約束是通過限制列中數(shù)據(jù)、行中數(shù)據(jù)以及表之間數(shù)據(jù)取值約束是通過限制列中數(shù)據(jù)、行中數(shù)據(jù)以及表之間數(shù)據(jù)取值從而保證數(shù)據(jù)完整性的非常有效和簡便的方法。從而保證數(shù)據(jù)完整性的非常有效和簡便的方法。 q 521 主鍵(主鍵(PRIMARY KEY)約束)約束q PRIMARY KE
8、Y約束在表中定義一個主鍵,唯一的標識約束在表中定義一個主鍵,唯一的標識表中的行。一個表只能有一個表中的行。一個表只能有一個PRIMARY KEY約束。約束。q 當向表中的現(xiàn)有列添加當向表中的現(xiàn)有列添加PRIMARY KEY約束時,約束時,SQL Server將檢查列中現(xiàn)有的數(shù)據(jù)以確保現(xiàn)有數(shù)據(jù)遵從主鍵將檢查列中現(xiàn)有的數(shù)據(jù)以確保現(xiàn)有數(shù)據(jù)遵從主鍵的規(guī)則,即無空值、無重復值。的規(guī)則,即無空值、無重復值。q 當當PRIMARY KEY約束由另一表的約束由另一表的FOREIGN KEY約束引約束引用時,不能刪除被引用的用時,不能刪除被引用的PRIMARY KEY約束,要刪除約束,要刪除它,必須先刪除引用的
9、它,必須先刪除引用的FOREIGN KEY約束。約束。q 每個表都應有一個主鍵。主鍵可以是一列或列組合。每個表都應有一個主鍵。主鍵可以是一列或列組合。SQL ServerSQL Server實用教程實用教程Page 72021年年12月月13日星期一日星期一q 1利用利用Management Studio定義(刪除)主鍵定義(刪除)主鍵q 2利用利用T-SQL語句定義(刪除)主鍵語句定義(刪除)主鍵q (1)在創(chuàng)建表時創(chuàng)建主鍵約束)在創(chuàng)建表時創(chuàng)建主鍵約束q 其語法格式如下。其語法格式如下。q 語法格式語法格式1:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型 CONST
10、RAINT 約束名約束名 PRIMARY KEY CLUSTEREDNONCLUSTERD,)q 語法格式語法格式2:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名( CONSTRAINT 約束名約束名 PRIMARY KEY CLUSTEREDNONCLUSTERD (列名列名1,n) ,)SQL ServerSQL Server實用教程實用教程Page 82021年年12月月13日星期一日星期一q 【例【例5.1】刪除原有】刪除原有kc表,重新創(chuàng)建表,重新創(chuàng)建kc表,字段定義不變,表,字段定義不變,同時將課程號設置為主鍵。同時將課程號設置為主鍵。USE xsglDROP TABLE kcGOC
11、REATE TABLE kc(課程號課程號 CHAR(4) NOT NULL CONSTRAINT pk_kch PRIMARY KEY,課程名課程名 CHAR(16) NOT NULL,學分學分 SMALLINT,學時數(shù)學時數(shù) SMALLINT)SQL ServerSQL Server實用教程實用教程Page 92021年年12月月13日星期一日星期一q(2)向已有表中添加主鍵約束)向已有表中添加主鍵約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名ADD CONSTRAINT 約束名約束名 PRIMARY KEY(列列名名1,n) ,)q-添加主鍵添加主鍵ALTER T
12、ABLE cjADD CONSTRAINT pk_xhkch PRIMARY KEY(學號學號,課程號課程號)GOSQL ServerSQL Server實用教程實用教程Page 102021年年12月月13日星期一日星期一q(3)刪除主鍵約束)刪除主鍵約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名DROP CONSTRAINT 約束名約束名q例如要刪除例如要刪除cj表中的主鍵約束,可以利用如下語句:表中的主鍵約束,可以利用如下語句:qALTER TABLE cjqDROP CONSTRAINT pk_xhkchq注意:向表中添加主鍵約束時,注意:向表中添加主鍵約束時,
13、SQL Server 將檢將檢查現(xiàn)有記錄的列值,以確?,F(xiàn)有數(shù)據(jù)符合主鍵的規(guī)查現(xiàn)有記錄的列值,以確?,F(xiàn)有數(shù)據(jù)符合主鍵的規(guī)則,所以在添加主鍵之前要保證主鍵列沒有空值和則,所以在添加主鍵之前要保證主鍵列沒有空值和重復值。重復值。SQL ServerSQL Server實用教程實用教程Page 112021年年12月月13日星期一日星期一q可使用可使用UNIQUE約束確保在非主鍵列中不輸入重約束確保在非主鍵列中不輸入重復值。在允許空值的列上保證唯一性時,應使用復值。在允許空值的列上保證唯一性時,應使用UNIQUE約束而不是約束而不是PRIMARY KEY約束,不過約束,不過在該列中只允許有一個在該列中
14、只允許有一個NULL值。一個表可以定值。一個表可以定義 多 個義 多 個 U N I Q U E 約 束 , 但 只 能 定 義 一 個約 束 , 但 只 能 定 義 一 個PRIMARY KEY約束。約束。FOREIGN KEY約束也可約束也可引用引用UNIQUE約束。約束。SQL ServerSQL Server實用教程實用教程Page 122021年年12月月13日星期一日星期一q 1利用利用Management Studio定義(刪除)唯一性約束定義(刪除)唯一性約束q 2利用利用T-SQL語句定義(刪除)唯一性約束語句定義(刪除)唯一性約束q (1)在創(chuàng)建表時創(chuàng)建唯一性約束)在創(chuàng)建表
15、時創(chuàng)建唯一性約束q 其語法格式如下。其語法格式如下。q 語法格式語法格式1:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型 CONSTRAINT 約束名約束名 UNIQUE CLUSTEREDNONCLUSTERD,)q 語法格式語法格式2:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名( CONSTRAINT 約束名約束名 UNIQUE CLUSTEREDNONCLUSTERD (列名列名1,n) ,)q 說明:語法格式說明:語法格式1定義單列唯一約束,語法格式定義單列唯一約束,語法格式2定義多列組定義多列組合唯一約束。合唯一約束。SQL ServerSQL Server
16、實用教程實用教程Page 132021年年12月月13日星期一日星期一q【例【例5.3】創(chuàng)建和】創(chuàng)建和kc表結構相同的表結構相同的kc_new表。表。USE xsglGOCREATE TABLE kc_new(課程號課程號 CHAR(4) NOT NULL CONSTRAINT pk_kch1 PRIMARY KEY,課程名課程名 CHAR(16) NOT NULL CONSTRAINT ix_kcm1 UNIQUE,學分學分 SMALLINT,學時數(shù)學時數(shù) SMALLINT)SQL ServerSQL Server實用教程實用教程Page 142021年年12月月13日星期一日星期一q(2)
17、向已有表中添加唯一約束)向已有表中添加唯一約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名ADD CONSTRAINT 約束名約束名 UNIQUE (列名列名1,n) ,)q(3)刪除唯一約束)刪除唯一約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名DROP CONSTRAINT 約束名約束名SQL ServerSQL Server實用教程實用教程Page 152021年年12月月13日星期一日星期一q 【例【例5.4】給】給kc表中課程名字段添加唯一約束。表中課程名字段添加唯一約束。USE xsglGOALTER TABLE kcADD CONST
18、RAINT ix_kcm UNIQUE(課程名課程名)GOq 【例【例5.5】刪除】刪除kc_new中的唯一約束。中的唯一約束。USE xsglGOALTER TABLE kc_newDROP CONSTRAINT ix_kcm1GOSQL ServerSQL Server實用教程實用教程Page 162021年年12月月13日星期一日星期一qCHECK約束是限制用戶輸入某一列的數(shù)據(jù)取值,約束是限制用戶輸入某一列的數(shù)據(jù)取值,即該列只能輸入一定范圍的數(shù)據(jù)。即該列只能輸入一定范圍的數(shù)據(jù)。qCHECK約束可以作為表定義的一部分在創(chuàng)建表時約束可以作為表定義的一部分在創(chuàng)建表時創(chuàng)建,也可以添加到現(xiàn)有表中。
19、表和列可以包含創(chuàng)建,也可以添加到現(xiàn)有表中。表和列可以包含多個多個CHECK約束。允許修改或刪除現(xiàn)有的約束。允許修改或刪除現(xiàn)有的CHECK約束。約束。q在現(xiàn)有表中添加在現(xiàn)有表中添加CHECK約束時,該約束可以僅作約束時,該約束可以僅作用于新數(shù)據(jù),也可以同時作用于已有的數(shù)據(jù)。默用于新數(shù)據(jù),也可以同時作用于已有的數(shù)據(jù)。默認設置為認設置為CHECK約束同時作用于已有數(shù)據(jù)和新數(shù)約束同時作用于已有數(shù)據(jù)和新數(shù)據(jù)。當希望現(xiàn)有數(shù)據(jù)維持不變,則使用約束僅作據(jù)。當希望現(xiàn)有數(shù)據(jù)維持不變,則使用約束僅作用于新數(shù)據(jù)選項。用于新數(shù)據(jù)選項。SQL ServerSQL Server實用教程實用教程Page 172021年年12
20、月月13日星期一日星期一q 1利用利用Management Studio定義(刪除)檢查約束定義(刪除)檢查約束q 2利用利用T-SQL語句定義(刪除)檢查約束語句定義(刪除)檢查約束q (1)在創(chuàng)建表時創(chuàng)建檢查約束)在創(chuàng)建表時創(chuàng)建檢查約束q 其語法格式如下。其語法格式如下。CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型 CONSTRAINT 約束名約束名 CHECK (邏輯表達邏輯表達式式) ,)q (2)向已有表中添加檢查約束)向已有表中添加檢查約束q 其語法格式如下。其語法格式如下。ALTER TABLE 表名表名WITH NOCHECKADD CONSTRAIN
21、T 約束名約束名 CHECK (邏輯表達式邏輯表達式) ,)SQL ServerSQL Server實用教程實用教程Page 182021年年12月月13日星期一日星期一q 【例【例5.6】 在在xs表中增加一個字段表中增加一個字段“電話電話(CHAR(8)”,為電話列添加檢,為電話列添加檢查約束,要求每個新加入或修改的電話號碼為查約束,要求每個新加入或修改的電話號碼為8位數(shù)字,但對表中現(xiàn)有的位數(shù)字,但對表中現(xiàn)有的記錄不進行檢查。記錄不進行檢查。USE xsglGOALTER TABLE xsADD 電話電話 char(8) nullq -向學生表中插入一條電話號碼為向學生表中插入一條電話號碼
22、為7位數(shù)字的記錄位數(shù)字的記錄INSERT xs(學號學號,姓名姓名,性別性別,出生時間出生時間,專業(yè)專業(yè),總學分總學分,電話電話)VALUES(2009030108,耿嬌耿嬌,女女,91/6/6,電子商務電子商務,19, 4501310)GOq -創(chuàng)建不檢查現(xiàn)有數(shù)據(jù)的檢查約束創(chuàng)建不檢查現(xiàn)有數(shù)據(jù)的檢查約束ALTER TABLE xsWITH NOCHECKADD CONSTRAINT ck_dhCHECK (電話電話 LIKE 0-90-90-90-90-90-90-90-9)GOSQL ServerSQL Server實用教程實用教程Page 192021年年12月月13日星期一日星期一q-創(chuàng)
23、建不檢查現(xiàn)有數(shù)據(jù)的檢查約束創(chuàng)建不檢查現(xiàn)有數(shù)據(jù)的檢查約束ALTER TABLE XS WITH NOCHECK ADD CONSTRAINT ck_dh CHECK (電話電話 LIKE 0-90-90-90-90-90-90-90-9)GOSQL ServerSQL Server實用教程實用教程Page 202021年年12月月13日星期一日星期一q(3)刪除檢查約束)刪除檢查約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名DROP CONSTRAINT 約束名約束名q【例【例5.7】刪除】刪除xs中的電話列的檢查約束。中的電話列的檢查約束。ALTER TABLE xsD
24、ROP CONSTRAINT ck_dhGOSQL ServerSQL Server實用教程實用教程Page 212021年年12月月13日星期一日星期一q注意:在默認情況下,檢查約束同時作用于新數(shù)注意:在默認情況下,檢查約束同時作用于新數(shù)據(jù)和表中已有的數(shù)據(jù),可以通過關鍵字據(jù)和表中已有的數(shù)據(jù),可以通過關鍵字WITH NOCHECK禁止禁止CHECK約束檢查表中已有的數(shù)據(jù)。約束檢查表中已有的數(shù)據(jù)。q與其他約束不同的是,與其他約束不同的是,CHECK約束可以通過約束可以通過NOCHECK和和CHECK關鍵字設置為無效或重新有關鍵字設置為無效或重新有效。效。q其語法格式如下。其語法格式如下。ALTE
25、R TABLE 表名表名NOCHECK CONSTRAINT 約束名約束名CHECK CONSTRAINT 約束名約束名SQL ServerSQL Server實用教程實用教程Page 222021年年12月月13日星期一日星期一q【例【例5.9】 將將xs表中電話列的檢查約束失效,然后表中電話列的檢查約束失效,然后插入一條具有插入一條具有6位數(shù)字的電話號碼字段,之后再重新位數(shù)字的電話號碼字段,之后再重新使其生效。使其生效。q-使使CHECK檢查失效檢查失效ALTER TABLE xsNOCHECK CONSTRAINT ck_dhq-插入測試數(shù)據(jù)插入測試數(shù)據(jù)INSERT xs(學號學號,姓名
26、姓名,性別性別,出生時間出生時間,專業(yè)專業(yè),總學分總學分,電電話話)VALUES(2009030105,牛學文牛學文,男男,89/09/20,電電子商務子商務,21, 123456)q-使使CHECK檢查生效檢查生效ALTER TABLE xsCHECK CONSTRAINT ck_dhSQL ServerSQL Server實用教程實用教程Page 232021年年12月月13日星期一日星期一q默認約束是指在用戶未提供某些列的數(shù)據(jù)時,數(shù)默認約束是指在用戶未提供某些列的數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)為用戶提供的默認值。從而簡化應用程據(jù)庫系統(tǒng)為用戶提供的默認值。從而簡化應用程序代碼和提高系統(tǒng)性能。序代碼和提
27、高系統(tǒng)性能。q表的每一列都可包含一個表的每一列都可包含一個DEFAULT定義。可以定義??梢孕薷幕騽h除現(xiàn)有的修改或刪除現(xiàn)有的DEFAULT定義,但必須首先定義,但必須首先刪除已有的刪除已有的DEFAULT定義,然后通過新定義重定義,然后通過新定義重新創(chuàng)建。新創(chuàng)建。 SQL ServerSQL Server實用教程實用教程Page 242021年年12月月13日星期一日星期一q(1)在創(chuàng)建表時創(chuàng)建默認值約束)在創(chuàng)建表時創(chuàng)建默認值約束q語法格式語法格式1:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型 CONSTRAINT 約束名約束名 DEFAULT 默認值默認值 ,)q
28、語法格式語法格式2:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名( CONSTRAINT 約束名約束名 DEFAULT默認值默認值 FOR 列列 ,)SQL ServerSQL Server實用教程實用教程Page 252021年年12月月13日星期一日星期一q (2)向已有表中添加默認值約束)向已有表中添加默認值約束q 其語法格式如下。其語法格式如下。ALTER TABLE 表名表名ADD CONSTRAINT 約束名約束名 默認值默認值 FOR 列列 ,)q【例【例5.10】 在在xs表的專業(yè)列添加一個默認約束,表的專業(yè)列添加一個默認約束,默認值為默認值為“電子商務電子商務”,然后添加一條新
29、記錄。,然后添加一條新記錄。q-添加默認值約束添加默認值約束ALTER TABLE xsADD CONSTRAINT df_zy DEFAULT 電子商務電子商務 FOR 專業(yè)專業(yè)q-插入測試記錄插入測試記錄 INSERT xs(學號學號,姓名姓名,出生時間出生時間,總學分總學分)VALUES(2009030107,張玉瑩張玉瑩,90/06/28,20)SQL ServerSQL Server實用教程實用教程Page 262021年年12月月13日星期一日星期一q(3)刪除默認值約束)刪除默認值約束q其語法格式如下。其語法格式如下。ALTER TABLE 表名表名DROP CONSTRAINT
30、 約束名約束名q【例【例5.11】刪除】刪除xs表性別列的默認約束。表性別列的默認約束。q-查看查看xs表性別列的默認約束名,如圖表性別列的默認約束名,如圖5.7所示。所示。Sp_help xsGOq-刪除刪除xs表性別列的默認約束表性別列的默認約束ALTER TABLE xsDROP CONSTRAINT df_zyGOSQL ServerSQL Server實用教程實用教程Page 272021年年12月月13日星期一日星期一q外鍵約束是為了強制實現(xiàn)表之間的參照完整性,外鍵約束是為了強制實現(xiàn)表之間的參照完整性,外鍵外鍵FOREIGN KEY可以和主表的主鍵或唯一鍵可以和主表的主鍵或唯一鍵對
31、應,外鍵約束不允許為空值,但是,如果組合對應,外鍵約束不允許為空值,但是,如果組合外鍵的某列含有空值,則將跳過該外鍵約束的檢外鍵的某列含有空值,則將跳過該外鍵約束的檢驗。驗。q1利用利用Management Studio定義(刪除)外定義(刪除)外鍵約束鍵約束SQL ServerSQL Server實用教程實用教程Page 282021年年12月月13日星期一日星期一q2利用利用T-SQL語句定義(刪除)外鍵唯一性約語句定義(刪除)外鍵唯一性約束束q(1)在創(chuàng)建表時創(chuàng)建外鍵約束)在創(chuàng)建表時創(chuàng)建外鍵約束語法格式語法格式1: CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型
32、CONSTRAINT 約束名約束名 FOREIGN KEY REFERENCES 參照主鍵表參照主鍵表(參照列參照列) ON DELETE CASCADEON UPDATE CASCADE ,)SQL ServerSQL Server實用教程實用教程Page 292021年年12月月13日星期一日星期一q 語法格式語法格式2:CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名( CONSTRAINT 約束名約束名 FOREIGN KEY (列列 ,n ) REFERENCES 參照主鍵表參照主鍵表(參照列參照列,n) ON DELETE CASCADEON UPDATE CASCADE ,)q 說明:
33、語法格式說明:語法格式1定義單列外鍵約束,語法格式定義單列外鍵約束,語法格式2定義多列定義多列組合外鍵約束。組合外鍵約束。q 其中:其中:ON DELETE CASCADE表示級聯(lián)刪除,表示級聯(lián)刪除, ON UPDATE CASCADE表示級聯(lián)更新,他們也稱為級聯(lián)參照表示級聯(lián)更新,他們也稱為級聯(lián)參照完整性約束。級聯(lián)參照完整性約束是為了保證外鍵數(shù)據(jù)的關完整性約束。級聯(lián)參照完整性約束是為了保證外鍵數(shù)據(jù)的關聯(lián)性。當刪除外鍵引用的主鍵記錄時,為了防止孤立外鍵的聯(lián)性。當刪除外鍵引用的主鍵記錄時,為了防止孤立外鍵的產生,同時刪除引用它的外鍵記錄。產生,同時刪除引用它的外鍵記錄。 SQL ServerSQL
34、 Server實用教程實用教程Page 302021年年12月月13日星期一日星期一q(2)向已有表中添加外鍵約束)向已有表中添加外鍵約束ALTER TABLE 表名表名ADD CONSTRAINT 約束名約束名 FOREIGN KEY (列列 , n ) REFERENCES 參照主鍵表參照主鍵表(參參照列照列, n) ON DELETE CASCADEON UPDATE CASCADE ,)SQL ServerSQL Server實用教程實用教程Page 312021年年12月月13日星期一日星期一q 【例【例5.12】把】把cj表中的學號創(chuàng)建為外鍵,其主鍵為表中的學號創(chuàng)建為外鍵,其主鍵為
35、xs表中的表中的學號;課程號創(chuàng)建為外鍵,其主鍵為學號;課程號創(chuàng)建為外鍵,其主鍵為kc表中的課程號。表中的課程號。ALTER TABLE cjADD CONSTRAINT fk_cj_xs FOREIGN KEY(學號學號) REFERENCES xs(學號學號)ALTER TABLE cjADD CONSTRAINT fk_cj_kc FOREIGN KEY(課程號課程號) REFERENCES kc(課程號課程號)SQL ServerSQL Server實用教程實用教程Page 322021年年12月月13日星期一日星期一q(3)刪除外鍵約束)刪除外鍵約束ALTER TABLE 表名表名DR
36、OP CONSTRAINT 約束名約束名q【例【例5.13】刪除外鍵約束?!縿h除外鍵約束。ALTER TABLE cjDROP CONSTRAINT fk_cj_xsGOALTER TABLE cjDROP CONSTRAINT fk_cj_kcGOSQL ServerSQL Server實用教程實用教程Page 332021年年12月月13日星期一日星期一q默認是一種數(shù)據(jù)庫對象,可以被綁定到一個或多默認是一種數(shù)據(jù)庫對象,可以被綁定到一個或多個列上,還可以綁定到用戶自定義類型上。當某個列上,還可以綁定到用戶自定義類型上。當某個默認創(chuàng)建后,可以反復使用。當向表中插入數(shù)個默認創(chuàng)建后,可以反復使用。
37、當向表中插入數(shù)據(jù)時,如果綁定有默認的列或者數(shù)據(jù)類型沒有明據(jù)時,如果綁定有默認的列或者數(shù)據(jù)類型沒有明確提供值,那么就將以默認指定的數(shù)據(jù)插入。定確提供值,那么就將以默認指定的數(shù)據(jù)插入。定義的默認值必須與所綁定列的數(shù)據(jù)類型一致,不義的默認值必須與所綁定列的數(shù)據(jù)類型一致,不能違背列的相關規(guī)則。能違背列的相關規(guī)則。SQL ServerSQL Server實用教程實用教程Page 342021年年12月月13日星期一日星期一q利用利用T-SQL語句創(chuàng)建默認的語法格式如下。語句創(chuàng)建默認的語法格式如下。qCREATE DEFAULT 默認值名稱默認值名稱 AS 常量表達式常量表達式q【例【例5.15】創(chuàng)建學時
38、數(shù)為】創(chuàng)建學時數(shù)為60的默認值。的默認值。USE xsglGOCREATE DEFAULT 學時數(shù)學時數(shù) AS 60GOSQL ServerSQL Server實用教程實用教程Page 352021年年12月月13日星期一日星期一q一個建好的默認值,只有綁定到表的列上或用戶一個建好的默認值,只有綁定到表的列上或用戶自定義的數(shù)據(jù)類型上后才起作用,如果不再需要自定義的數(shù)據(jù)類型上后才起作用,如果不再需要該默認值,則要將該默認值從相應的列或自定義該默認值,則要將該默認值從相應的列或自定義數(shù)據(jù)類型上解綁。利用命令的方式來綁定默認和數(shù)據(jù)類型上解綁。利用命令的方式來綁定默認和解除綁定默認。解除綁定默認。q其
39、語法格式如下。其語法格式如下。qEXECUTE sp_bindefault 默認值名稱默認值名稱 , 表表名名.字段名字段名用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型qEXECUTE sp_unbindefault 表名表名.字段名字段名用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型SQL ServerSQL Server實用教程實用教程Page 362021年年12月月13日星期一日星期一q 【例【例5.16】將默認值學時數(shù)綁定到】將默認值學時數(shù)綁定到kc表的學時數(shù)上。表的學時數(shù)上。USE xsglGOEXEC sp_bindefault 學時數(shù)學時數(shù),kc.學時數(shù)學時數(shù)GOq 【例【例5.17】解除例】解
40、除例5.16中的綁定。中的綁定。USE xsglGOEXEC sp_unbindefault kc.學時數(shù)學時數(shù)GOSQL ServerSQL Server實用教程實用教程Page 372021年年12月月13日星期一日星期一q可以用可以用DROP DEFAULT語句刪除默認值對象。語句刪除默認值對象。q其語法格式如下。其語法格式如下。qDROP DEFAULT 默認值名稱默認值名稱 ,q注意:在刪除一個默認值之前,應首先將它從所注意:在刪除一個默認值之前,應首先將它從所綁定的列或自定義數(shù)據(jù)類型上解綁,否則系統(tǒng)會綁定的列或自定義數(shù)據(jù)類型上解綁,否則系統(tǒng)會報錯。報錯。SQL ServerSQL
41、Server實用教程實用教程Page 382021年年12月月13日星期一日星期一q規(guī)則是保證域完整性的主要手段,它類似于規(guī)則是保證域完整性的主要手段,它類似于CHECK約束。與約束。與CHECK約束相比,其執(zhí)行功能約束相比,其執(zhí)行功能相同。相同。CHECK約束是使用約束是使用ALTER或或CREATE TABLE的的CHECK關鍵字創(chuàng)建的,是對列中的值關鍵字創(chuàng)建的,是對列中的值進行限制的首選標準方法(可以對一列或多列定進行限制的首選標準方法(可以對一列或多列定義多個約束)。規(guī)則是一種數(shù)據(jù)庫對象,可以綁義多個約束)。規(guī)則是一種數(shù)據(jù)庫對象,可以綁定到一列或多個列上,還可以綁定到用戶自定義定到一列
42、或多個列上,還可以綁定到用戶自定義數(shù)據(jù)類型上,規(guī)則定義之后可以反復使用。數(shù)據(jù)類型上,規(guī)則定義之后可以反復使用。q列或用戶自定義數(shù)據(jù)類型只能有一個綁定的規(guī)則。列或用戶自定義數(shù)據(jù)類型只能有一個綁定的規(guī)則。但是,列可以同時具有規(guī)則和多個但是,列可以同時具有規(guī)則和多個CHECK約束。約束。SQL ServerSQL Server實用教程實用教程Page 392021年年12月月13日星期一日星期一q利用利用T-SQL語句創(chuàng)建規(guī)則的語法格式如下。語句創(chuàng)建規(guī)則的語法格式如下。qCREATE RULE 規(guī)則名稱規(guī)則名稱 AS 條件表達式條件表達式q【例【例5.19】創(chuàng)建名為】創(chuàng)建名為“總學分總學分”的規(guī)則,
43、要求其的規(guī)則,要求其取值范圍在取值范圍在050之間。之間。USE xsglGOCREATE RULE 總學分總學分 AS score=0 and score=50GO SQL ServerSQL Server實用教程實用教程Page 402021年年12月月13日星期一日星期一q綁定和解綁規(guī)則可以使用圖形界面方法,也可以綁定和解綁規(guī)則可以使用圖形界面方法,也可以利用利用T-SQL語句。其語法格式如下。語句。其語法格式如下。qsp_bindrule 規(guī)則名稱規(guī)則名稱, 表名表名.字段名字段名|用戶自用戶自定義數(shù)據(jù)類型定義數(shù)據(jù)類型qsp_unbindrule 表名表名.字段名字段名|用戶自定義數(shù)據(jù)
44、用戶自定義數(shù)據(jù)類型類型q【例【例5.20】將總學分規(guī)則綁定到】將總學分規(guī)則綁定到xs表的總學分列表的總學分列上。上。qEXECUTE sp_bindrule 總學分總學分,xs.總學分總學分SQL ServerSQL Server實用教程實用教程Page 412021年年12月月13日星期一日星期一q 由于規(guī)則是數(shù)據(jù)庫對象,因此象默認一樣可以利用由于規(guī)則是數(shù)據(jù)庫對象,因此象默認一樣可以利用Management Studio的的“對象資源管理器對象資源管理器”展開節(jié)點到規(guī)展開節(jié)點到規(guī)則,單擊右鍵,在快捷菜單中選擇則,單擊右鍵,在快捷菜單中選擇“刪除刪除”,這里我們主要,這里我們主要介紹利用介紹利
45、用T-SQL語句刪除規(guī)則。其語法格式如下。語句刪除規(guī)則。其語法格式如下。q DROP RULE規(guī)則名稱規(guī)則名稱 ,q 【例【例5.22】刪除規(guī)則】刪除規(guī)則“成績成績”和和“總學分總學分”。EXECUTE sp_unbindrule cj.成績成績EXECUTE sp_unbindrule xs.總學分總學分GODROP RULE 成績成績,總學分總學分GOSQL ServerSQL Server實用教程實用教程Page 422021年年12月月13日星期一日星期一q 表中的主鍵和唯一鍵都可以起到表中記錄的標識作用,有時表中的主鍵和唯一鍵都可以起到表中記錄的標識作用,有時為了方便可以讓計算機為表
46、中的記錄按照要求自動地生成標為了方便可以讓計算機為表中的記錄按照要求自動地生成標識字段的值,識字段的值,q IDENTITY列即自動編號列。若在表中創(chuàng)建一個列即自動編號列。若在表中創(chuàng)建一個IDENTITY(標識符)列,則當用戶向表中插入新的數(shù)據(jù)行時,系統(tǒng)自(標識符)列,則當用戶向表中插入新的數(shù)據(jù)行時,系統(tǒng)自動為該行的動為該行的IDENTITY列賦值,并保證其值在表中的唯一性。列賦值,并保證其值在表中的唯一性。每個表中只能有一個每個表中只能有一個IDENTITY列,其列值不能由用戶更新,列,其列值不能由用戶更新,不允許空值,也不允許綁定默認值或建立不允許空值,也不允許綁定默認值或建立DEFAUL
47、T約束。約束。IDENTITY列常與列常與PRIMARY KEY約束一起使用,從而保證約束一起使用,從而保證表中各行具有唯一標識。表中各行具有唯一標識。q 標識列的有效數(shù)據(jù)類型可以是任何整數(shù)數(shù)據(jù)類型分類的數(shù)據(jù)標識列的有效數(shù)據(jù)類型可以是任何整數(shù)數(shù)據(jù)類型分類的數(shù)據(jù)類型(類型(bit數(shù)據(jù)類型除外),也可以是數(shù)據(jù)類型除外),也可以是decimal數(shù)據(jù)類型,但數(shù)據(jù)類型,但不允許出現(xiàn)小數(shù)。不允許出現(xiàn)小數(shù)。SQL ServerSQL Server實用教程實用教程Page 432021年年12月月13日星期一日星期一q 1利用利用Management Studio定義定義DENTITY列列q 2利用利用T-S
48、QL語句創(chuàng)語句創(chuàng)IDENTITY列列q 其語法格式如下。其語法格式如下。CREATE TABLE 數(shù)據(jù)表名數(shù)據(jù)表名(列名列名 數(shù)據(jù)類型數(shù)據(jù)類型 IDENTITY (種子種子,遞增量遞增量) ,)q 【例【例5.23】在】在cj表中添加類型為整型的表中添加類型為整型的“編號編號”列,利列,利用用IDENTITY使其成為初值為使其成為初值為1,依次遞增,依次遞增1的序列。的序列。USE xsglGOALTER TABLE cjADD 編號編號 int IDENTITY(1,1) NOT NULLGOSQL ServerSQL Server實用教程實用教程Page 442021年年12月月13日星期一日星
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度行政合同在教育培訓行業(yè)的實施與特征
- 2025年上半年貴州黔南甕安縣統(tǒng)一招聘事業(yè)單位工作人員200人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔東南臺江縣事業(yè)單位招聘31人(第二批)重點基礎提升(共500題)附帶答案詳解-1
- 2025年上半年貴州醬酒集團限公司公開招聘62人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州省黔南州獨山縣人民政府政務服務中心招聘2人易考易錯模擬試題(共500題)試卷后附參考答案
- 二零二五版集團車輛購置與充電樁建設一體化協(xié)議3篇
- 2025年上半年貴州省納雍縣農村經(jīng)濟發(fā)展投資限責任公司招聘8人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州畢節(jié)市科技館招考事業(yè)單位工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年西安工業(yè)大學北方工程學院專職教師招考易考易錯模擬試題(共500題)試卷后附參考答案
- 二零二五版充電樁場地租賃及充電樁技術研發(fā)合作協(xié)議3篇
- GB/T 22484-2008城市公共汽電車客運服務
- GB/T 14040-2007預應力混凝土空心板
- 帶狀皰疹護理查房課件整理
- 奧氏體型不銹鋼-敏化處理
- 作物栽培學課件棉花
- 交通信號控制系統(tǒng)檢驗批質量驗收記錄表
- 弱電施工驗收表模板
- 絕對成交課件
- 探究基坑PC工法組合鋼管樁關鍵施工技術
- 國名、語言、人民、首都英文-及各地區(qū)國家英文名
- API SPEC 5DP-2020鉆桿規(guī)范
評論
0/150
提交評論