第13章數據完整性(新)_第1頁
第13章數據完整性(新)_第2頁
第13章數據完整性(新)_第3頁
第13章數據完整性(新)_第4頁
第13章數據完整性(新)_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第13章章 數據完整性數據完整性13.1 數據完整性概念數據完整性概念13.2 數據約束數據約束13.3 缺省與規(guī)則缺省與規(guī)則13.4 約束與缺省、規(guī)則比較約束與缺省、規(guī)則比較13.1 數據完整性概念數據完整性概念n什么是數據庫的完整性什么是數據庫的完整性n數據庫的完整性是指數據的正確性和相容性數據庫的完整性是指數據的正確性和相容性n正確性:數據是符合現實世界語義、反映當前正確性:數據是符合現實世界語義、反映當前實際狀況的。實際狀況的。n相容性:數據庫同一對象在不同關系表中的數相容性:數據庫同一對象在不同關系表中的數據是符合邏輯的。據是符合邏輯的。n數據庫完整性是防止不合語義或不正確的數數據

2、庫完整性是防止不合語義或不正確的數據進入數據庫,體現了是否真實地反映現實據進入數據庫,體現了是否真實地反映現實世界世界n 1.提供定義完整性約束條件的機制提供定義完整性約束條件的機制 DBMS應提供定義數據庫完整性約束條件,并應提供定義數據庫完整性約束條件,并把它們存入數據庫中。把它們存入數據庫中。n2.提供完整性檢查的方法提供完整性檢查的方法 檢查數據是否滿足完整性約束條件的機制稱為檢查數據是否滿足完整性約束條件的機制稱為完整性檢查。一般在完整性檢查。一般在INSERT、UPDATE、DELETE語句執(zhí)行后開始檢查。語句執(zhí)行后開始檢查。n3.違約處理違約處理 DBMS若發(fā)現用戶的操作違背了完

3、整性約束條若發(fā)現用戶的操作違背了完整性約束條件,就采取一定的動作以保證數據的完整性,件,就采取一定的動作以保證數據的完整性,如拒絕執(zhí)行該操作,或級聯執(zhí)行其他操作。如拒絕執(zhí)行該操作,或級聯執(zhí)行其他操作。DBMS維護數據庫完整性的機制:維護數據庫完整性的機制:數據的完整性和安全性數據的完整性和安全性n數據的完整性和安全性是兩個不同數據的完整性和安全性是兩個不同概念概念n數據的完整性數據的完整性防止數據庫中存在不符合語義的數據,也就是防止防止數據庫中存在不符合語義的數據,也就是防止數據庫中存在不正確的數據數據庫中存在不正確的數據防范對象:不合語義的、不正確的數據防范對象:不合語義的、不正確的數據n數

4、據的安全性數據的安全性保護數據庫防止惡意的破壞和非法的存取保護數據庫防止惡意的破壞和非法的存取防范對象:非法用戶和非法操作防范對象:非法用戶和非法操作完整性類型完整性類型n13.1.1 實體完整性實體完整性n13.1.2 參照完整性參照完整性n13.1.3 用戶定義完整性用戶定義完整性SQL完整性組件完整性組件域完整性:域完整性指列的值域的完整性。如數據類型、格式、域完整性:域完整性指列的值域的完整性。如數據類型、格式、值域范圍、是否允許空值等。值域范圍、是否允許空值等。13.1.1 實體完整性實體完整性n規(guī)則規(guī)則n檢查和違約處理檢查和違約處理nSQL Server實現實體完整性的組件實現實體

5、完整性的組件實體完整性規(guī)則實體完整性規(guī)則規(guī)則規(guī)則1 實體完整性規(guī)則(實體完整性規(guī)則(Entity Integrity) 若屬性若屬性A是基本關系是基本關系R的的主屬性主屬性,則屬性,則屬性A不能取不能取空值空值。例例1:單:單列列SAP (SUPERVISOR, SPECIALITY, POSTGRADUATE)POSTGRADUATE:主碼(假設研究生不會重名)不能取空:主碼(假設研究生不會重名)不能取空值值例例2 2:多列多列SC(S#,C#,GRADE) 屬性屬性S#和和C#都不能取空。都不能取空。實體完整性說明實體完整性說明(1) 實體完整性規(guī)則是針對基本關系而言的。一個基本表通實體完

6、整性規(guī)則是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集。常對應現實世界的一個實體集。(2) 現實世界中的實體是可區(qū)分的,即它們具有某種唯一性現實世界中的實體是可區(qū)分的,即它們具有某種唯一性標識。標識。(3) 關系模型中以主碼作為唯一性標識。關系模型中以主碼作為唯一性標識。(4) 主碼中的屬性即主屬性不能取空值。主碼中的屬性即主屬性不能取空值。主屬性取空值,就說明存在某個不可標識的實體,即存主屬性取空值,就說明存在某個不可標識的實體,即存在不可區(qū)分的實體,這與第(在不可區(qū)分的實體,這與第(2)點相矛盾,因此這個)點相矛盾,因此這個規(guī)則稱為實體完整性規(guī)則稱為實體完整性實體完整性檢查和

7、違約處理實體完整性檢查和違約處理n插入或對主碼列進行更新操作時,插入或對主碼列進行更新操作時,DBMS按照實體按照實體完整性規(guī)則自動進行檢查。包括:完整性規(guī)則自動進行檢查。包括:n1. 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改n2. 檢查主碼的各個屬性是否為空,只要有一個為空就拒檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改絕插入或修改實體完整性檢查和違約處理實體完整性檢查和違約處理(續(xù)續(xù))n檢查記錄中主碼值是否唯一的一種方法是進行檢查記錄中主碼值是否唯一的一種方法是進行全全表掃描表掃描實體完整性檢查和違約處理實體完整性檢查和違約

8、處理(續(xù)續(xù))n在索引在索引中檢查是否唯一。中檢查是否唯一。 SQL完整性組件完整性組件nSQL Server實現實體完整性的組件實現實體完整性的組件n索引:聚集索引索引:聚集索引nUnique約束:定義非空的唯一約束約束:定義非空的唯一約束nPrimary約束:主鍵約束約束:主鍵約束nIdentity屬性屬性:自動增加:自動增加Identity屬性屬性n語法語法IDENTITY (seed , increment) nseed :加載到表中的第一個行所使用的值。:加載到表中的第一個行所使用的值。 nincrement :與前一個加載的行的標識值相加的增量值。:與前一個加載的行的標識值相加的增量

9、值。 n必須同時指定種子和增量,或者二者都不指定。必須同時指定種子和增量,或者二者都不指定。 如果如果二者都未指定,則取默認值二者都未指定,則取默認值 (1,1)n舉例舉例CREATE TABLE new_employees( id_num int IDENTITY (1,1), fname varchar (20), minit char(1), lname varchar(30);13.1.2 參照完整性參照完整性n關系間的引用關系間的引用n外碼外碼n參照完整性規(guī)則參照完整性規(guī)則1. 關系間的引用關系間的引用n在關系模型中實體及實體間的聯系都是用關系來在關系模型中實體及實體間的聯系都是用關

10、系來描述的,因此可能存在著關系與關系間的引用。描述的,因此可能存在著關系與關系間的引用。例例1 學生實體、專業(yè)實體學生實體、專業(yè)實體 學生(學生(學號學號,姓名,性別,姓名,性別,專業(yè)號,年齡),年齡) 專業(yè)(專業(yè)(專業(yè)號,專業(yè)名),專業(yè)名)主碼主碼主碼主碼v學生關系引用了專業(yè)關系的主碼學生關系引用了專業(yè)關系的主碼“專業(yè)號專業(yè)號”。v 學生關系中的學生關系中的“專業(yè)號專業(yè)號”值必須是確實存在的專業(yè)的專業(yè)號值必須是確實存在的專業(yè)的專業(yè)號 ,即,即專業(yè)專業(yè) 關系中有該專業(yè)的記錄。關系中有該專業(yè)的記錄。關系間的引用關系間的引用(續(xù)續(xù))例例2 學生、課程、學生與課程之間的多對多學生、課程、學生與課程之

11、間的多對多聯系聯系 學生(學生(學號,姓名,性別,專業(yè)號,年齡),姓名,性別,專業(yè)號,年齡) 課程(課程(課程號課程號,課程名,學分),課程名,學分) 選修(選修(學號,課程號課程號,成績),成績)關系間的引用關系間的引用(續(xù)續(xù))例例3 學生實體及其內部的一對多聯系學生實體及其內部的一對多聯系 學生(學生(學號學號,姓名,性別,專業(yè)號,年齡,班長),姓名,性別,專業(yè)號,年齡,班長)學學 號號姓姓 名名性性 別別專專 業(yè)業(yè) 號號年年 齡齡班班 長長801張張 三三女女0119802802李李 四四男男0120803王王 五五男男0120802804趙趙 六六女女0220805805錢錢 七七男男

12、0219v“學號學號”是主碼,是主碼,“班長班長”是外碼,它引用了本關系的是外碼,它引用了本關系的“學號學號” v“班長班長” 必須是確實存在的學生的學號必須是確實存在的學生的學號 2外碼(外碼(Foreign Key)n設設F是基本關系是基本關系R的一個或一組屬性,但不是關系的一個或一組屬性,但不是關系R的碼。如果的碼。如果F與基本關系與基本關系S的主碼的主碼Ks相對應,則相對應,則稱稱F是基本關系是基本關系R的的外碼外碼n基本關系基本關系R稱稱為為參照關系參照關系(Referencing Relation)n基本關系基本關系S稱稱為為被參照關系被參照關系(Referenced Relati

13、on) 或或目標關系目標關系(Target Relation)外碼外碼(續(xù)續(xù))n例例1:學生關系的:學生關系的“專業(yè)號與專業(yè)關系的主專業(yè)號與專業(yè)關系的主碼碼“專業(yè)號專業(yè)號”相對應相對應n“專業(yè)號專業(yè)號”屬性是學生關系的外碼屬性是學生關系的外碼n專業(yè)關系是被參照關系,學生關系為參照關系專業(yè)關系是被參照關系,學生關系為參照關系 外碼外碼(續(xù)續(xù))n例例2: 選修關系的選修關系的“學號學號” 與學生關系的主碼與學生關系的主碼“學號學號”相對應選修關系的相對應選修關系的“課程號課程號”與課程關系的主碼與課程關系的主碼“課程號課程號”相對應相對應n“學號學號”和和“課程號課程號”是選修關系的外碼是選修關系

14、的外碼n學生關系和課程關系均為被參照關系學生關系和課程關系均為被參照關系n選修關系為參照關系選修關系為參照關系 外碼外碼(續(xù)續(xù))n例例3:“班長班長”與本身的主碼與本身的主碼“學號學號”相對應相對應n“班長班長”是外碼是外碼n學生關系既是參照關系也是被參照關系學生關系既是參照關系也是被參照關系 外碼外碼(續(xù)續(xù))n關系關系R和和S不一定是不同的關系不一定是不同的關系n目標關系目標關系S的主碼的主碼Ks 和參照關系的外碼和參照關系的外碼F必須定義必須定義在同一個(或一組)域上在同一個(或一組)域上n外碼并不一定要與相應的主碼同名外碼并不一定要與相應的主碼同名 當外碼與相應的主碼屬于不同關系時,往往

15、取相當外碼與相應的主碼屬于不同關系時,往往取相同的名字,以便于識別同的名字,以便于識別3. 參照完整性規(guī)則參照完整性規(guī)則規(guī)則規(guī)則2.2 參照完整性規(guī)則參照完整性規(guī)則 若屬性(或屬性組)若屬性(或屬性組)F是基本關系是基本關系R的外碼它與基的外碼它與基本關系本關系S的主碼的主碼Ks相對應(基本關系相對應(基本關系R和和S不一定不一定是不同的關系),則對于是不同的關系),則對于R中每個元組在中每個元組在F上的值上的值必須為:必須為:n或者取空值(或者取空值(F的每個屬性值均為空值)的每個屬性值均為空值)n或者等于或者等于S中某個元組的主碼值中某個元組的主碼值 這條規(guī)則的實質是什么?這條規(guī)則的實質是

16、什么? “不允許引用不存在的實體不允許引用不存在的實體”。參照完整性規(guī)則參照完整性規(guī)則(續(xù)續(xù))例例1:學生關系中每個元組的學生關系中每個元組的“專業(yè)號專業(yè)號”屬性只取兩類屬性只取兩類值:值:(1)空值空值,表示尚未給該學生分配專業(yè),表示尚未給該學生分配專業(yè)(2)非空值,這時該值必須)非空值,這時該值必須是專業(yè)關系中某個是專業(yè)關系中某個元組的元組的“專業(yè)號專業(yè)號”值值,表示該學生不可能分配,表示該學生不可能分配一個不存在的專業(yè)一個不存在的專業(yè)參照完整性規(guī)則參照完整性規(guī)則(續(xù)續(xù))例例2 :選修(選修(學號學號,課程號課程號,成績),成績)“學號學號”和和“課程號課程號”可能的取值可能的取值 : (

17、1)選修關系中的主屬性,不能取空值)選修關系中的主屬性,不能取空值 (2)只能取相應被參照關系中已經存在的主碼值)只能取相應被參照關系中已經存在的主碼值參照完整性規(guī)則參照完整性規(guī)則(續(xù)續(xù))例例3:學生(學生(學號學號,姓名,性別,專業(yè)號,年齡,班長),姓名,性別,專業(yè)號,年齡,班長)“班長班長”屬性值可以取兩類值:屬性值可以取兩類值:(1)空值,表示該學生所在班級尚未選出班長)空值,表示該學生所在班級尚未選出班長(2)非空值,該值必須是本關系中某個元組的學號)非空值,該值必須是本關系中某個元組的學號值值13.1.3 用戶定義的完整性用戶定義的完整性n針對某一具體關系數據庫的約束條件,反針對某一

18、具體關系數據庫的約束條件,反映某一具體應用所涉及的數據必須滿足的映某一具體應用所涉及的數據必須滿足的語義要求語義要求n關系模型應提供定義和檢驗這類完整性的關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,機制,以便用統一的系統的方法處理它們,而不要由應用程序承擔這一功能而不要由應用程序承擔這一功能13.2 數據約束數據約束n13.2.1 13.2.1 列級約束與表級約束列級約束與表級約束n13.2.2 13.2.2 主鍵約束主鍵約束n13.2.3 13.2.3 唯一約束唯一約束n13.2.4 13.2.4 外鍵約束外鍵約束n13.2.5 13.2.5 缺省約束缺省約束n

19、13.2.6 CHECK13.2.6 CHECK約束約束n13.2.7 13.2.7 啟用和禁用約束啟用和禁用約束使用使用sys.key_constraints目錄視圖目錄視圖查看數據庫約束查看數據庫約束2022年1月25日第30頁13.2.1 列級約束與表級約束n列約束被指定為列定義的一部分,并且僅列約束被指定為列定義的一部分,并且僅適用于指定的單個列。適用于指定的單個列。n表約束的聲明與列的定義無關,可以適用表約束的聲明與列的定義無關,可以適用于表中一個以上的列。于表中一個以上的列。n當一個約束中必須包含一個以上的列時,必須當一個約束中必須包含一個以上的列時,必須使用表約束。例如,如果一個

20、表的主鍵內有兩使用表約束。例如,如果一個表的主鍵內有兩個或兩個以上的列,則必須使用表約束將這兩個或兩個以上的列,則必須使用表約束將這兩列加入主鍵內。列加入主鍵內。列級約束與表級約束舉例CREATE TABLE table7 ( c1 int, c2 int, c3 char(5), c4 char(10),CONSTRAINT c1 PRIMARY KEY(c1,c2)CREATE TABLE department /*部門表部門表*/( dno int PRIMARY KEY, /*部門號部門號,為主鍵為主鍵*/ dname char(20), /*部門名部門名*/)表級約束表級約束列級約束

21、列級約束13.2.2 主鍵約束n作為表定義的一部分在創(chuàng)建表時創(chuàng)建。作為表定義的一部分在創(chuàng)建表時創(chuàng)建。n添加到還沒有添加到還沒有PRIMARY KEY約束的表中(一個約束的表中(一個表只能有一個表只能有一個PRIMARY KEY約束)。約束)。n如果已有如果已有PRIMARY KEY約束,則可對其進行修約束,則可對其進行修改或刪除。例如,可以使表的改或刪除。例如,可以使表的PRIMARY KEY約約束引用其他列,更改列的順序、索引名、聚集選束引用其他列,更改列的順序、索引名、聚集選項或項或PRIMARY KEY約束的填充因子。定義了約束的填充因子。定義了PRIMARY KEY約束的列的列寬不能更

22、改。約束的列的列寬不能更改。13.2.3 唯一約束 UNIQUEnUNIQUE約束在列集內強制執(zhí)行值的唯一約束在列集內強制執(zhí)行值的唯一性。對于性。對于UNIQUE約束中的列,表中不允約束中的列,表中不允許有兩行包含相同的非空值。主鍵也強制許有兩行包含相同的非空值。主鍵也強制執(zhí)行唯一性,但主鍵不允許空值,而且每執(zhí)行唯一性,但主鍵不允許空值,而且每個表中主鍵只能有一個,但是個表中主鍵只能有一個,但是UNIQUE列列卻可以有多個。卻可以有多個。nUNIQUE約束優(yōu)先于唯一索引。約束優(yōu)先于唯一索引。使用使用ALTER TABLE語句定義語句定義UNIQUE約束約束n在students表中,主鍵約束創(chuàng)建

23、在studentID列上,如果這時還需要保證該表中的存儲身份證號的SSL列的數據是唯一的,可以使用UNIQUE約束。一般地,把UNIQUE約束稱為候選的主鍵約束。2022年1月25日第35頁13.2.4 外鍵約束 nFOREIGN KEY約束稱為外鍵約束,用于標識表之間的關約束稱為外鍵約束,用于標識表之間的關系,以強制參照完整性,即為表中一列或者多列數據提供系,以強制參照完整性,即為表中一列或者多列數據提供參照完整性。參照完整性。n一個表中最多可以有一個表中最多可以有253個可以參照的表,因此每個表最多個可以參照的表,因此每個表最多可以有可以有253個個FOREIGN KEY約束。約束。n在在

24、FOREIGN KEY約束中,只能參照同一個數據庫中的表,約束中,只能參照同一個數據庫中的表,而不能參照其他數據庫中的表。而不能參照其他數據庫中的表。nFOREIGN KEY子句中的列數目和每個列指定的數據類型子句中的列數目和每個列指定的數據類型必須和必須和REFERENCE子句中的列相同。子句中的列相同。nFOREIGN KEY約束不能自動創(chuàng)建索引。約束不能自動創(chuàng)建索引。n參照同一個表中的列時,必須只使用參照同一個表中的列時,必須只使用REFERENCE子句,子句,而不能使用而不能使用FOREIGN KEY子句。子句。n在臨時表中,不能使用在臨時表中,不能使用FOREIGN KEY約束。約束

25、。外鍵約束的基本語法形式外鍵約束的基本語法形式n在在CREATE TABLE語句中定義列的外鍵約束語句中定義列的外鍵約束FOREIGN KEY REFERENCES 外表名(參照列)外表名(參照列) ON DELETE NO ACTION|CASCADE|SET NULL| SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL| SET DEFAULTn在在ALTER TABLE語句中定義列的外鍵約束語句中定義列的外鍵約束FOREIGN KEY (COLUMN) REFERENCES 外表名(參照列)外表名(參照列) ON DELETE NO ACT

26、ION|CASCADE|SET NULL| SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL| SET DEFAULTn在在CREATE TABLE語句中定義多列的外鍵約束語句中定義多列的外鍵約束FOREIGN KEY (COLUMN_list) REFERENCES 外表名(參照列名表)外表名(參照列名表) ON DELETE NO ACTION|CASCADE|SET NULL| SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL| SET DEFAULTUSE testGOCREATE TABL

27、E worker/*職工表職工表*/(no int PRIMARY KEY, /*編號編號,為主鍵為主鍵*/name char(8),/*姓名姓名*/sex char(2),/*性別性別*/dno int /*部門號部門號*/FOREIGN KEY REFERENCES department(dno)ON DELETE NO ACTION, /*刪除主鍵數據時外鍵表的行為刪除主鍵數據時外鍵表的行為*/address char(30)/*地址地址*/)GO該程序使用該程序使用FOREIGN KEY子句在子句在worker表中建立了表中建立了一個刪除約束,即一個刪除約束,即worker表的表的dn

28、o列(是一個外鍵)與列(是一個外鍵)與department表的表的dno列關聯。如果外鍵表有數據,則刪除失列關聯。如果外鍵表有數據,則刪除失敗,敗, NO ACTION是默認選項是默認選項【例】 在表定義時創(chuàng)建外鍵在表定義時創(chuàng)建外鍵在在ALTER TABLE語句中定義外語句中定義外鍵約束鍵約束2022年1月25日第39頁13.2.5 缺省約束 DEFAULTn缺省約束是加在列上的缺省值。缺省值是指當對缺省約束是加在列上的缺省值。缺省值是指當對列數據進行列數據進行 INSERT操作時系統自動提供的值。操作時系統自動提供的值。n列的缺省約束值可以是常數或系統函數列的缺省約束值可以是常數或系統函數n

29、列的缺省約束值也可以是事先定義的缺省,在創(chuàng)列的缺省約束值也可以是事先定義的缺省,在創(chuàng)建數據表的時候定義缺省約束時有兩種方法:建數據表的時候定義缺省約束時有兩種方法:n用界面操作方便用界面操作方便n用命令操作需要兩步:第一步定義表結構,第二步綁用命令操作需要兩步:第一步定義表結構,第二步綁定缺省定缺省列的缺省約束值是常數的情況CREATE TABLEjsy_temp4 (駕照號駕照號intIDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,姓名姓名 varchar(8) NOT NULL,是否見習是否見習 varchar(20) DEFAULT(是是),身份

30、證號身份證號 char(18) NOT NULL UNIQUE NONCLUSTERED)使用使用ALTER TABLE語句定義語句定義DEFAULT約束約束2022年1月25日第42頁13.2.6 CHECK約束nCHECK約束通過限制用戶輸入的值來約束通過限制用戶輸入的值來加強域完整性。它指定應用于列中輸入的加強域完整性。它指定應用于列中輸入的所有值的布爾(取值為所有值的布爾(取值為TRUE或或FALSE)搜)搜索條件,拒絕所有不取值為索條件,拒絕所有不取值為TRUE的值??傻闹怠?梢詾槊苛兄付ǘ鄠€以為每列指定多個CHECK約束。約束。以下程序在以下程序在test數據庫中創(chuàng)建一個數據庫中創(chuàng)

31、建一個table6表,其中使用表,其中使用CHECK約束來限定約束來限定f2列只能為列只能為0100分:分:USE testGOCREATE TABLE table6(f1 int,f2 int NOT NULL CHECK(f2=0 AND f2=100)GO當執(zhí)行如下語句:當執(zhí)行如下語句:INSERT table6 VALUES(1,120)則會出現如圖則會出現如圖13.2所示的錯誤消息。所示的錯誤消息。例例: CHECK約束的使用方法約束的使用方法13.2.7 啟用和禁用約束n(1)當建立主鍵約束或惟一約束時,)當建立主鍵約束或惟一約束時,SQL Server會在后臺自動建立惟會在后臺自

32、動建立惟一索引,并對表中的數據進行檢查,以確保數據符合約束要求,這種一索引,并對表中的數據進行檢查,以確保數據符合約束要求,這種自查過程是無法關閉。自查過程是無法關閉。n(2)當創(chuàng)建檢查約束和外鍵約束時,在缺省狀態(tài)下,系統也會自動)當創(chuàng)建檢查約束和外鍵約束時,在缺省狀態(tài)下,系統也會自動對數據進行檢查,與主鍵約束和惟一約束不同的是,它可以取消。當對數據進行檢查,與主鍵約束和惟一約束不同的是,它可以取消。當確認表中的數據已經符合約束條件時,就不必再浪費時間重復檢查。確認表中的數據已經符合約束條件時,就不必再浪費時間重復檢查。如果已確認表中的數據不符合約束條件,又不想馬上清理當前的數據,如果已確認表

33、中的數據不符合約束條件,又不想馬上清理當前的數據,也不必對數據進行檢查,此時可以使用也不必對數據進行檢查,此時可以使用WITH NOCHECK選項關閉選項關閉檢查當前數據。檢查當前數據。n(3)當為某列加入一個新的缺省約束,)當為某列加入一個新的缺省約束,SQL Server 并不對該列已有并不對該列已有數據進行檢查,表中已有記錄保留原有的取值或數據進行檢查,表中已有記錄保留原有的取值或NULL。當新建一列。當新建一列同時指定其缺省值時,同時指定其缺省值時,SQL Server才為已有記錄填充數值。如果使用才為已有記錄填充數值。如果使用了了WITH VALUES選項,選項,SQL Server

34、會把缺省值賦給新列,否則新列會把缺省值賦給新列,否則新列為為NULL。如果新列不允許為。如果新列不允許為NULL ,則無論是否指定了,則無論是否指定了WITH VALUES選項,都使用缺省值。選項,都使用缺省值。n(4)當向數據庫添加大量的數據時,可以臨時禁止檢查約束和外鍵)當向數據庫添加大量的數據時,可以臨時禁止檢查約束和外鍵約束。約束。使用使用WITH NOCHECK子句子句n該約束對表中已有數據不強制檢查。但是,如果該約束對表中已有數據不強制檢查。但是,如果以后更新表中數據要檢查更新后的數據是否滿足以后更新表中數據要檢查更新后的數據是否滿足約束。約束。第46頁13.3 缺省與規(guī)則缺省與規(guī)

35、則 nSQLServer中缺?。J值)和規(guī)則的概念中缺省(默認值)和規(guī)則的概念n缺?。J值)是為列提供數據的一種方式,如果缺省(默認值)是為列提供數據的一種方式,如果用戶進行用戶進行INSERT操作時不為列輸入數據,則使用操作時不為列輸入數據,則使用缺省值。缺省值。n規(guī)則是當用戶進行規(guī)則是當用戶進行INSERT或或UPDATE操作時,對操作時,對輸入列中的數據設定的取值范圍。輸入列中的數據設定的取值范圍。n缺省與規(guī)則不是缺省與規(guī)則不是ANSI標準,一般不提倡使用,標準,一般不提倡使用,應盡可能使用約束,任何可以使用缺省與規(guī)則應盡可能使用約束,任何可以使用缺省與規(guī)則的地方都有可以使用約束。的

36、地方都有可以使用約束。13.3 缺省與規(guī)則缺省與規(guī)則 n特點特點(1)缺省與規(guī)則是數據庫對象,它們是獨立于表和列而缺省與規(guī)則是數據庫對象,它們是獨立于表和列而建立的。建立的。(2)缺省與規(guī)則建立后與列或數據類型產生關聯,列和缺省與規(guī)則建立后與列或數據類型產生關聯,列和數據類型就具有了缺省與規(guī)則的屬性。數據類型就具有了缺省與規(guī)則的屬性。(3)缺省與規(guī)則定義后,可以重復使用,可以綁定到多缺省與規(guī)則定義后,可以重復使用,可以綁定到多個列或數據類型上。個列或數據類型上。(4)缺省與規(guī)則不隨表同時調入內存,當用到時才被調缺省與規(guī)則不隨表同時調入內存,當用到時才被調入內存,這可能會使程序執(zhí)行出現延時。入內

37、存,這可能會使程序執(zhí)行出現延時。13.3 缺省與規(guī)則缺省與規(guī)則 n13.3.1 創(chuàng)建缺省和規(guī)則創(chuàng)建缺省和規(guī)則n13.3.2 綁定綁定n13.3.3 取消綁定取消綁定n13.3.4 刪除缺省和規(guī)則刪除缺省和規(guī)則13.3.1 創(chuàng)建缺省和規(guī)則CREATE DEFAULT default_name AS constant_expression其中其中default_name為缺省值對象名,為缺省值對象名, constant_expression為一個常量、數學表達式為一個常量、數學表達式或內置函數,不能引用其列或別的數據庫對象?;騼戎煤瘮?,不能引用其列或別的數據庫對象。創(chuàng)建缺省舉例創(chuàng)建缺省舉例/*使用

38、下面語句創(chuàng)建使用下面語句創(chuàng)建con3默認對象默認對象,其默認值為其默認值為10 */create default con3 as 10go13.3.1 創(chuàng)建缺省和規(guī)則CREATE RULE rule_name AS rule_conditionsn其中rule_name為規(guī)則對象名,rule_conditions為規(guī)則表達式,表示數據需滿足的條件。例:創(chuàng)建一個名為例:創(chuàng)建一個名為rule1的規(guī)則,限定輸入的值必須在的規(guī)則,限定輸入的值必須在010之間。之間。USE test GO CREATE RULE rule1 AS c1 BETWEEN 0 and 10 GO13.3.2 綁定n綁定到綁定到某列或用戶自定義某列或用戶自定義的數據類型上,的數據類型上,以便它們在數據輸入或修改操作中起作用。以便它們在數據輸入或修改操作中起作用。n使用時要注意缺省和規(guī)則所用的數據類型使用時要注

溫馨提示

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

最新文檔

評論

0/150

提交評論