求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

約束檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
約束

約束,讀音為yuē shù ,有纏縛束縛,按照約定(特定)條件限制管束等意思。[1]

基本信息

中文名 約束

外文名 Constrains

類型 結構化查詢語言 [2]

作用 添加、刪除

約束1.jpg

約束類型 主鍵約束等

近義詞 拘謹,收斂,管制

反義詞 放縱,放蕩

約束類型

約束2.jpg

主鍵約束(Primary Key constraint):要求主鍵列數據唯一,並且不允許為空。

唯一約束(Unique constraint):要求該列唯一,允許為空,但只能出現一個空值。

檢查約束(Check constraint):某列取值範圍限制,格式限制等,如有關年齡、郵箱(必須有@)的約束。

默認約束(Default constraint):某列的默認值,如在數據庫里有一項數據很多重複,可以設為默認值。

外鍵約束(Foreign Key constraint):用於在兩個表之間建立關係,需要指定引用主表的哪一列。

添加

語法:

約束3.jpg

ALTER TABLE 表名

ADD CONSTRAINT 約束名 約束 類型 具體的約束說明

上述語法表示修改某個表,添加某個約束。其中,約束名的命名規則推薦採用"約束類型_約束字段"這樣的形式。[1]

示例:

添加主鍵約束(將stuNo設為主鍵):

ALTER TABLE stuInfo

ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)

添加唯一約束(身份證號唯一):

約束4.jpg

ALTER TABLE stuInfo

ADD CONSTRAINT UQ_stuID UNIQUE (stuID)

添加默認約束(如果地址不填,默認為"地址不詳"):

ALTER TABLE stuInfo

ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不詳') FOR stuAddress

添加檢查約束(要求年齡只能在 15~40歲之間)

ALTER TABLE stuInfo

約束5.jpg

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 表名

約束6.jpg

DROP CONSTRAINT 約束名

示例:

刪除stuInfo表中地址默認約束的語句:

ALTER TABLE stuInfo

DROP CONSTRAINT DF_stuAddress

刪除外鍵約束注意事項:

對於存在外鍵約束的表,如果進行刪除非空的外鍵,可能會出現錯誤。

a. 如果在 FOREIGN KEY 約束的列中輸入非 NULL 值,則此值必須在被引用的列中存在,否則將返回違反外鍵約束的錯誤信息。

b. FOREIGN KEY 約束應用於前面所講的列,除非指定了源列。

約束7.png

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 約束。

約束8.jpg

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。

約束9.jpg

更新規則

指定當數據庫的用戶嘗試更新某一行,而該行包含外鍵關系所涉及的數據時所發生的情況。如果設置為:

a. 無操作 顯示一條錯誤信息,告知用戶不允許執行該刪除操作,DELETE 將被回滾。

b. 級聯 刪除包含外鍵關係中所涉及的數據的所有行。

c. 設置空 如果表的所有外鍵列都可接受空值,則將該值設置為空。僅適用於 SQL Server 2005。

e. 設置默認值 如果表的所有外鍵列均已定義默認值,則將該值設置為列定義的默認值。僅適用於 SQL Server 2005。

參考來源