久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

列級約束與表級約束 ?。,。?/span>

 昵稱39360 2011-08-09
在SQL Server中有5種約束:
主鍵約束(primary key constraint)
唯一性約束(unique constraint)
檢查約束(check constraint)
缺省約束(default constraint)
外部鍵約束(foreign key constraint)

在SQL SERVER中,,
(1)      對于基本表的約束分為列約束和表約束
約束是限制用戶輸入到表中的數(shù)據(jù)的值的范圍,,一般分為列級約束與表級約束。
         列級約束有六種:主鍵Primary key,、外鍵foreign key ,、唯一 unique、檢查 checck ,、默認default ,、非空/空值 not null/ null
         表級約束有四種:主鍵、外鍵,、唯一,、檢查

列約束是對某一個特定列的約束,包含在列定義中,,直接跟在該列的其他定義之后,,用空格分隔,不必指定列名,;
表約束與列定義相互獨立,,不包括在列定義中,,通常用于對多個列一起進行約束,與列定義用’,’分隔,,定義表約束時必須指出要約束的那些列的名稱,。完整性約束的基本語法格式為:
              [ CONSTRAINT <約束名> ] <約束類型>
約束名:約束不指定名稱時,系統(tǒng)會給定一個名稱,。

(2)列級約束與表級約束的區(qū)別
如果完整性約束涉及到該表的多個屬性列,,必須定義在表級上,否則既可以定義在列級也可以定義在表級,。
簡而言之:
列級約束:列級約束是行定義的一部分,只能應(yīng)用于一列上,。
表級約束:表級約束是獨立于列的定義,,可以應(yīng)用在一個表中的多列上。

(3)列級約束與表級約束在SQL中的用法(即如何在SQL中定義約束)
在創(chuàng)建表時定義約束:
           CREATE TABLE table_name  
                 ({<column_definition> -------列級約束定義
                |column_name AS computed_column_expression -------計算列定義
                |<teble_constraint> ------表級約束定義
                   }[,….n]
                   )


一個約束定義為列級約束還是表級約束,?,??
根據(jù)實際需要和設(shè)計者思路確定,。如primary key,,當(dāng)只涉及到一列時,定義為列級約束,;當(dāng)涉及到多列時,,則定義為表級約束。
Prinmary key定義為列級約束時,,相應(yīng)SQL語句:
Stu_id上建立的主鍵pk_1為列級約束


CREATE TABLE student
(Stu_id int constraint pk_1 primary key,   
Stu_name varchar(8),
….)
當(dāng)定義為表級約束時,,相應(yīng)SQL語句:
CREATE TABLE student
(Stu_id int NOT NULL,
Stu_id上建立的主鍵pk_1為的表級約束

Stu_name varchar(8),
Constraint pk_1 primary key (Stu_id), 
….)


各約束具體說明:
1. 主鍵約束
PRIMARY KEY約束
PRIMARY KEY約束用于定義基本表的主鍵,起唯一標識作用,,其值不能為NULL,,也不能重復(fù),以此來保證實體的完整性,。
PRIMARY KEY與UNIQUE約束類似,,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區(qū)別:
①在一個基本表中只能定義一個PRIMARY KEY約束,,但可定義多個UNIQUE約束,;
②對于指定為PRIMARY KEY的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)空值,,而對于UNIQUE所約束的唯一鍵,,則允許為空。
注意:不能為同一個列或一組列既定義UNIQUE約束,,又定義PRIMARY KEY約束,。
PRIMARY KEY既可用于列約束,,也可用于表約束。
PRIMARY KEY用于定義列約束時,,其語法格式如下:
              CONSTRAINT <約束名> PRIMARY KEY
PRIMARY KEY用于定義表約束時,,即將某些列的組合定義為主鍵,其語法格式如下:
     [CONSTRAINT <約束名>]S PRIMARY KEY (<列名>[{<列名>}])

2. 唯一性(UNIQUE)約束
UNIQUE約束用于指明基本表在某一列或多個列的組合上的取值必須唯一,。
定義了UNIQUE約束的那些列稱為唯一鍵,,系統(tǒng)自動為唯一鍵建立唯一索引,從而保證了唯一鍵的唯一性,。
唯一鍵允許為空,,但系統(tǒng)為保證其唯一性,最多只可以出現(xiàn)一個NULL值,。
UNIQUE既可用于列約束,,也可用于表約束。
UNIQUE用于定義列約束時,,其語法格式如下:
              [CONSTRAINT <約束名>] UNIQUE
唯一性約束用于指定一個或者多個列的組合的值具有唯一性,,以防止在列中輸入重復(fù)的值。當(dāng)使用唯一性約束時,,需要考慮以下幾個因素:
①使用唯一性約束的字段允許為空值,。
②一個表中可以允許有多個唯一性約束。
③可以把唯一性約束定義在多個字段上,。
④唯一性約束用于強制在指定字段上創(chuàng)建一個唯一性索引,。
⑤缺省情況下,創(chuàng)建的索引類型為非聚簇索引,。

unique約束是用來確保不受主鍵約束列上的數(shù)據(jù)的唯一性.
unique與primary key的區(qū)別在于:
    (1)unique約束主要用于非主鍵的一列或多列上要求數(shù)據(jù)唯一.
    (2) unique約束允許該列上存在NULL值,而主鍵決不允許出現(xiàn).
    (3)可以在一個表創(chuàng)建多個unique約束,而在一個表上只能夠設(shè)置一個主鍵

3. 檢查約束
CHECK約束用來檢查字段值所允許的范圍,,如,一個字段只能輸入整數(shù),,而且限定在0-100的整數(shù),,以此來保證域的完整性。
CHECK既可用于列約束,,也可用于表約束,,
其語法格式為:
       [CONSTRAINT <約束名>] CHECK (<條件>)
一個列級檢查約束只能與限制的字段有關(guān);一個表級檢查約束只能與限制的表中字段有關(guān),。
一個表中可以定義多個檢查約束,。
每個CREATE TABLE語句中每個字段只能定義一個檢查約束。
在多個字段上定義檢查約束,,則必須將檢查約束定義為表級約束,。
當(dāng)執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù)。
檢查約束中不能包含子查詢,。

4. 缺省約束
使用缺省約束時,,應(yīng)該注意以下幾點:
每個字段只能定義一個缺省約束。
如果定義的缺省值長于其對應(yīng)字段的允許長度,,那么輸入到表中的缺省值將被截斷,。
不能加入到帶有IDENTITY屬性或者數(shù)據(jù)類型為timestamp的字段上。
如果字段定義為用戶定義的數(shù)據(jù)類型,,而且有一個缺省綁定到這個數(shù)據(jù)類型上,,則不允許該字段有缺省約束。

5. 外部鍵約束
外部鍵約束用于強制參照完整性,,提供單個字段或者多個字段的參照完整性,。 FOREIGN KEY約束指定某一個列或一組列作為外部鍵,其中,,包含外部鍵的表稱為從表(參照表),,包含外部鍵所引用的主鍵或唯一鍵的表稱主表(被參照表)。
系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個主鍵值或唯一鍵值,,要么取空值。以此保證兩個表之間的連接,,確保了實體的參照完整性,。
FOREIGN KEY既可用于列約束,也可用于表約束,,
其語法格式為:
       [CONSTRAINT <約束名>] FOREIGN KEY                    REFERENCES <主表名> (<列名>[{<列名>}])
當(dāng)使用外部鍵約束時,,應(yīng)該考慮以下幾個因素:
①外部鍵約束提供了字段參照完整性。
②外部鍵從句中的字段數(shù)目和每個字段指定的數(shù)據(jù)類型必須和REFERENCES從句中的字段相匹配,。
③外部鍵約束不能自動創(chuàng)建索引,,需要用戶手動創(chuàng)建。
④用戶想要修改外部鍵約束的數(shù)據(jù),,必須有對外部鍵約束所參考表的SELECT權(quán)限或者REFERENCES權(quán)限,。
⑤參考同一表中的字段時,必須只使用REFERENCES子句,,不能使用外部鍵子句,。
⑥一個表中最多可以有31個外部鍵約束。
⑦在臨時表中,,不能使用外部鍵約束,。
⑧主鍵和外部鍵的數(shù)據(jù)類型必須嚴格匹配。

6. NULL 約束
(1)NULL/NOT NULL
是否允許該字段的值為NULL,。
NULL值不是0也不是空白,,更不是填入字符串“NULL”,而是表示“不知道”,、“不確定”或“沒有數(shù)據(jù)”的意思,。
當(dāng)某一字段的值一定要輸入才有意義的時候,,則可以設(shè)置為NOT NULL。
如主鍵列就不允許出現(xiàn)空值,,否則就失去了唯一標識一條記錄的作用
只能用于定義列約束,,
其語法格式如下:
              [CONSTRAINT <約束名> ][NULL|NOT NULL]

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多