約束
基本信息
約束類型
主鍵約束(Primary Key constraint):要求主鍵列數據唯一,並且不允許為空。
唯一約束(Unique constraint):要求該列唯一,允許為空,但只能出現一個空值。
檢查約束(Check constraint):某列取值範圍限制,格式限制等,如有關年齡、郵箱(必須有@)的約束。
默認約束(Default constraint):某列的默認值,如在數據庫里有一項數據很多重複,可以設為默認值。
外鍵約束(Foreign Key constraint):用於在兩個表之間建立關係,需要指定引用主表的哪一列。
添加
語法:
ALTER TABLE 表名
ADD CONSTRAINT 約束名 約束 類型 具體的約束說明
上述語法表示修改某個表,添加某個約束。其中,約束名的命名規則推薦採用"約束類型_約束字段"這樣的形式。[1]
示例:
添加主鍵約束(將stuNo設為主鍵):
ALTER TABLE stuInfo
ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)
添加唯一約束(身份證號唯一):
ALTER TABLE stuInfo
ADD CONSTRAINT UQ_stuID UNIQUE (stuID)
添加默認約束(如果地址不填,默認為"地址不詳"):
ALTER TABLE stuInfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不詳') FOR stuAddress
添加檢查約束(要求年齡只能在 15~40歲之間)
ALTER TABLE stuInfo
ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)
添加外鍵約束(主表 stuInfo 和從表 stuGrade 建立關係,關聯字段為 stuNo ):
ALTER TABLE stuGrade
ADD CONSTRAINT FK_stuNo
FOREIGN KEY (stuNo) REFERENCES stuInfo(stuNo)
GO
刪除
語法
ALTER TABLE 表名
DROP CONSTRAINT 約束名
示例:
刪除stuInfo表中地址默認約束的語句:
ALTER TABLE stuInfo
DROP CONSTRAINT DF_stuAddress
刪除外鍵約束注意事項:
對於存在外鍵約束的表,如果進行刪除非空的外鍵,可能會出現錯誤。
a. 如果在 FOREIGN KEY 約束的列中輸入非 NULL 值,則此值必須在被引用的列中存在,否則將返回違反外鍵約束的錯誤信息。
b. FOREIGN KEY 約束應用於前面所講的列,除非指定了源列。
c. FOREIGN KEY 約束僅能引用位於同一服務器上的同一數據庫中的表。數據庫間的引用完整性必須通過觸發器實現。有關更多信息,請參見 CREATE TRIGGER。
d. FOREIGN KEY 可以引用同一表中的其它列(自引用)。
e. 列級 FOREIGN KEY 約束的 REFERENCES 子句僅能列出一個引用列,且該列必須與定義約束的列具有相同的數據類型。
f. 表級 FOREIGN KEY 約束的 REFERENCES 子句中引用列的數目必須與約束列列表中的列數相同。每個引用列的數據類型也必須與列表中相應列的數據類型相同。
e. 如果 timestamp 類型的列是外鍵或被引用鍵的一部分,則不能指定 CASCADE。
g. 可以在相互間具有引用關係的表上組合使用 CASCADE 和 NO ACTION。如果 SQL Server 遇到 NO ACTION,將終止執行語句並回滾相關的 CASCADE 操作。當 DELETE 語句導致 CASCADE 和 NO ACTION 組合操作時,在 SQL Server 檢查 NO ACTION 操作之前將執行所有 CASCADE 操作。
h. 一個表最多可包含 253 個 FOREIGN KEY 約束。
i. 對於臨時表不強制 FOREIGN KEY 約束。
j. 每個表在其 FOREIGN KEY 約束中最多可以引用 253 個不同的表。
k. FOREIGN KEY 約束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 約束中的列或被引用表上 UNIQUE INDEX 中的列。
INSERT 和 UPDATE 規範類別
展開以顯示有關該關係的"刪除規則"和"更新規則"的信息。
刪除規則
指定當數據庫的最終用戶嘗試刪除某一行,而該行包含外鍵關系所涉及的數據時所發生的情況。如果設置為:
a. 無操作 顯示一條錯誤信息,告知用戶不允許執行該刪除操作,DELETE 將被回滾。
b. 級聯 刪除包含外鍵關係中所涉及的數據的所有行。
c. 設置空 如果表的所有外鍵列都可接受空值,則將該值設置為空。僅適用於 SQL Server 2005。
d. 設置默認值 如果表的所有外鍵列均已定義默認值,則將該值設置為列定義的默認值。僅適用於 SQL Server 2005。
更新規則
指定當數據庫的用戶嘗試更新某一行,而該行包含外鍵關系所涉及的數據時所發生的情況。如果設置為:
a. 無操作 顯示一條錯誤信息,告知用戶不允許執行該刪除操作,DELETE 將被回滾。
b. 級聯 刪除包含外鍵關係中所涉及的數據的所有行。
c. 設置空 如果表的所有外鍵列都可接受空值,則將該值設置為空。僅適用於 SQL Server 2005。
e. 設置默認值 如果表的所有外鍵列均已定義默認值,則將該值設置為列定義的默認值。僅適用於 SQL Server 2005。