使用約束的小技巧

約束(constraint):約束是SQL Server提供的自動保持數據庫完整性的一種方法,它通過限制字段中數據、記錄中數據和表之間的數據來保證數據的完整性。在SQL SERVER中,對於基本表的約束分爲列約束和表約束。

要想看列約束和表約束的區別,請看檢查約束的例子。)

列約束是對某一個特定列的約束,包含在列定義中,直接跟在該列的其他定義之後,用空格分隔,不必指定列名;

表約束與列定義相互獨立,不包括在列定義中,通常用於對多個列一起進行約束,與列定義用’,’分隔,定義表約束時必須指出要約束的那些列的名稱。

1)創建約束

完整性約束的基本語法格式爲:
   [CONSTRAINT constraint_name(約束名)] <約束類型>
   約束不指定名稱時,系統會給定一個名稱。

在SQL Server 2005中有6種約束
主鍵約束(primary key constraint)、
惟一性約束(unique constraint)、
檢查約束(check constraint)、
默認約束(default constraint)、
外部鍵約束(foreign key constraint)
空值(NULL)約束。

創建檢查約束常用的操作方法有如下兩種 :使用SQL Server管理平臺創建檢查約束(即右鍵,選擇,點擊的過程用Transact-SQL語句創建檢查約束。

2)檢查約束 CHECK

檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數據庫數據的完整性。

這裏全選sql語句寫的約束做例子。

用Transact-SQL語句創建檢查約束。其語法形式如下:
   CONSTRAINT constraint_name
   CHECK [NOT FOR REPLICATION]
   (logical_expression)

注:下面爲列約束
CREATE TABLE 我的會員
(
會員編號 smallint NOT NULL
CONSTRAINT MemberNoChk
CHECK (會員編號 BETWEEN 1 AND 10000),
姓名 nvarchar(20) NOT NULL,
地址 nvarchar(60) NOT NULL
);
GO

(注:下面爲表約束

看清楚了沒有:列約束和表約束的區別就是列約束是直接跟在後面,而表約束則不是。

CREATE TABLE 我的會員
(
會員編號 smallint NOT NULL,
姓名 nvarchar(20) NOT NULL,
地址 nvarchar(60) NOT NULL,
CONSTRAINT ChkMemberNo
CHECK (會員編號 BETWEEN 1 AND 10000)
);
GO

2)主鍵約束PRIMARY KEY

PRIMARY KEY約束用於定義基本表的主鍵,它是惟一確定表中每一條記錄的標識符,其值不能爲NULL,也不能重複,以此來保證實體的完整性。PRIMARY KEY與UNIQUE約束類似,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在着很大的區別:

①在一個基本表中只能定義一個PRIMARY KEY約束,但可定義多個UNIQUE約束;

②對於指定爲PRIMARY KEY的一個列或多個列的組合,其中任何一個列都不能出現空值,而對於UNIQUE所約束的唯一鍵,則允許爲空。

注意:不能爲同一個列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束。
PRIMARY KEY既可用於列約束,也可用於表約束。

使用Transact-SQL語句操作法設置主鍵約束,其語法形式如下:
   CONSTRAINT constraint_name
   PRIMARY KEY [CLUSTERED|NONCLUSTERED]
(column_name)

PRIMARY KEY用於定義表約束時,即將某些列的組合定義爲主鍵,其語法格式如下:
   CONSTRAINT constraint_name
   PRIMARY KEY [CLUSTERED|NONCLUSTERED]
(column_name[,…n])


3)惟一性約束UNIQUE

使用Transact-SQL語句完成惟一性約束的操作,其語法形式如下:
CONSTRAINT constraint_name
UNIQUE [CLUSTERED|NONCLUSTERED]
column_name[,…n])

CREATE TABLE 我的員工
(
員工編號 int IDENTITY(10,10) NOT NULL
CONSTRAINT PK_員工編號_我的員工
    PRIMARY KEY ,
身份證號碼 char(10) NOT NULL
CONSTRAINT UQ_身份證號碼_我的員工
UNIQUE,
技能檢定編號 char(6) NOT NULL
CONSTRAINT UQ_技能檢定編號_我的員工
UNIQUE,
姓名 nvarchar(16) NULL,
電話號碼 char(11) NULL,
行動電話 int NULL,
CONSTRAINT UQ_姓名_電話號碼_我的員工
UNIQUE (姓名, 電話號碼),
CONSTRAINT UQ_姓名_行動電話_我的員工
UNIQUE (姓名, 行動電話)
);

4)外部鍵約束FOREIGN KEY

     外鍵 (FOREIGN KEY) 是用於建立和加強兩個表數據之間的鏈接的一列或多列。外部鍵約束用於強制參照完整性。
      當使用外部鍵約束時,應該考慮以下幾個因素:
外部鍵約束提供了字段參照完整性;
外部鍵從句中的字段數目和每個字段指定的數據類型都必須和REFERENCES從句中的字段相匹配;
外部鍵約束不能自動創建索引,需要用戶手動創建;
用戶想要修改外部鍵約束的數據,必須有對外部鍵約束所參考表的SELECT權限或者REFERENCES權限;
參考同一表中的字段時,必須只使用REFERENCES子句,不能使用外部鍵子句;
一個表中最多可以有253個外部鍵約束;
在臨時表中,不能使用外部鍵約束;
主鍵和外部鍵的數據類型必須嚴格匹配

5)默認約束 DEFAULT

默認約束指定在插入操作中如果沒有提供輸入值時,則系統自動指定值。默認約束可以包括常量、函數、不帶變元的內建函數或者空值。

創建默認約束的Transact-SQL語句操作法。其語法形式如下:
CONSTRAINT constraint_name
   DEFAULT constraint_expression [FOR column_name]

CREATE TABLE 我的員工

地址 varchar(60) NOT NULL DEFAULT '北京市',
年收入 money NULL DEFAULT 10000
GO


6)空值約束NULL | NOT NULL

空值(NULL)約束用來控制是否允許該字段的值爲NULL。NULL值不是0也不是空白,更不是填入字符串的“NULL”字符串,而是表示“不知道”、“ 不確定”或“沒有數據”的意思。
當某一字段的值一定要輸入纔有意義的時候,則可以設置爲NOT NULL。如主鍵列就不允許出現空值,否則就失去了唯一標識一條記錄的作用。空值(NULL)約束只能用於定義列約束。

使用Transact-SQL語句設置空值(NULL)約束, 其語法形式如下:
     [CONSTRAINT <約束名> ][NULL|NOT NULL]

建立一個S表,對SNO字段進行NOT NULL約束。
程序清單如下:

CREATE TABLE S
(SNO CHAR(10) CONSTRAINT S_CONS NOT NULL,
SN VARCHAR(20),
AGE INT,
SEX CHAR(2) DEFAULT '男' ,
DEPT VARCHAR(20))

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章