複製鏈接
請複製以下鏈接發送給好友

CONSTRAINT

(編程命令)

鎖定
CONSTRAINT 子句是指 限制和索引相似,雖然限制也能被用於建立和另一個表的關聯。 用 ALTER TABLE 和 CREATE TABLE 語句中的 CONSTRAINT 子句來建立或刪除條件.CONSTRAINT 子句可分為兩種類型:第一種是在單一字段上創建條件;第二種是在一個以上的字段上創建條件。
外文名
CONSTRAINT
子句指
限制和索引相似
類    別
編程命令
範    疇
計算機語言

目錄

CONSTRAINT語法

單一字段條件:
CONSTRAINT名 {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES 外部表 [(外部字段1,外部字段2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}
多重字段條件:
CONSTRAINT名
CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]])|
|
UNIQUE (unique1[, unique2 [, ...]])|
|
NOT NULL (notnull1[, notnull2 [, ...]])|
FOREIGN KEY [NO INDEX] (ref1 [, ref2 [, ...]])REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]}
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}
子句可分為以下幾個部分:
部分 説明
name 欲創建的條件的名稱。
primary1, primary2 被指定為主鍵.的字段名
unique1, unique2 欲設計成為唯一鍵的一個或多個字段之名稱。
notnull1, notnull2 被限制為非 Null 值的字段的名稱。
ref1, ref2 涉及到另一個表中的字段的外部鍵字段名
foreigntable 包含由外部字段註明的字段的外部表名。
foreignfield1, foreignfield2 由 ref1、ref2 指定的 foreigntable 中的字段的名稱。如果引用的字段是 foreigntable 的主鍵,則可省略此子句。
説明
緊接在字段的數據類型規格之後,在 ALTER TABLE 或 CREATE TABLE 語句的字段定義子句中,使用單一字段條件之語法。
只要在 ALTER TABLE 或 CREATE TABLE 語句的字段定義子句之外使用保留字 CONSTRAINT,就可以使用多重字段條件之語法。
將字段設計為如下的條件類型之一:
可以使用 UNIQUE 保留字將字段設計為唯一鍵。這意味着在同一個表中沒有兩個記錄的這個字段的值是相同的。可以強制任何字段或字段列表為唯一的。如果多重字段條件被設計成唯一鍵,在索引之中的所有字段的組合值必須也是唯一的,即使在這些字段之中有兩個或兩個以上的記錄有相同的值。
可以用 PRIMARY KEY 保留字,將表中的字段或一組字段設計為主鍵。在主鍵之中所有的值必須是唯一的,且不可為 Null,一個表只能有一個主鍵。

CONSTRAINT注意

在一個已經設有主鍵的表中,不能再設置 PRIMARY KEY 條件,否則會發生錯誤。
您可以使用 FOREIGN KEY 保留字將一個字段設置為外部鍵。如果外部表的主鍵是由一個以上的字段所組成,則必須使用多重字段條件定義,列出全部的引用字段、外部表名、以及以列出引用字段相同的順序在外部表中列出引用字段的名稱。若所引用的字段是外部表的主鍵,則無須指定所引用的字段。根據默認,數據庫引擎在認為外部表的主鍵是所引用字段的情況下執行操作。
外部鍵條件限定具體的活動在一個相應的主鍵值被改變時來執行:
你可以指定外部表上執行的活動,此活動基於一個在定義了CONSTRAINT的表中主鍵上執行的相應的活動。例如,考慮以下對“客户”表的定義
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
考慮表的以下定義,定義外部鍵與Customers表的主鍵關係的順序為:
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY), CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE
ON UPDATE CASCADE 和 ON DELETE CASCADE 子句都定義於外部鍵上。 ON UPDATE CASCADE 子句的含義是:如果用户的標識符(CustId)在用户表中更新,此更新將通過順序表級聯。各個含有相應用户標識符值的順序隨着新值自動更新。 ON DELETE CASCADE 子句的含義是:如果一個用户被從用户表中刪除,順序表中所有包含同樣用户標識符值的位序也會被刪除。
考慮到表中下列不同的定義,用 SET NULL 活動代替CASCADE活動的順序為:
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL
ON UPDATE SET NULL 子句的含義是:如果用户的標識符 (CustId) 在用户表中更新,順序表中相應的外部鍵值將會被自動設為 NULL。相似地,ON DELETE SET NULL 子句的含義是:如果一個用户被從用户表中刪除,順序表中所有相應的外部鍵將會被自動設為NULL。
為阻止外部鍵索引的自動生成,可使用變址器 NO INDEX。這一形式的外部鍵定義僅用於經常要複製形成索引值的情況。在外部鍵索引中的數值經常被複制的場合,使用索引不如直接進行表搜索有效。對這種索引和表中插入和刪除的行列的維護會降低性能,沒有任何好處。