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