使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

限制式與索引相似,但前者還能用來建立與其他資料表的關聯圖。

您可以在 ALTER TABLE 和 CREATE TABLE 陳述式中使用 CONSTRAINT 子句來建立或刪除限制式。 CONTRAINT 子句有兩種類型:一種用來在單一欄位建立限制式,另一種則用於在多個欄位建立限制式。

附註: Microsoft Access 資料庫引擎不支援搭配非 Microsoft Access 資料庫使用 CONSTRAINT 或任何資料定義語言陳述式。 請改為使用 DAO Create 方法。

語法

單一欄位限制式:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

多欄位限制式:

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]}

CONSTRAINT 子句有三個部分:

部分

描述

name

要建立之限制式的名稱。

primary1, primary2

要指定主索引鍵的欄位名稱。

unique1, unique2

要指定為唯一索引鍵的欄位名稱。

notnull1, notnull2

限定為只能使用非 Null 值的欄位名稱。

ref1, ref2

參照其他資料表欄位的外部索引鍵欄位名稱。

foreigntable

包含 foreignfield 所指定欄位的外部資料表名稱。

foreignfield1, foreignfield2

ref1ref2 指定之 foreigntable 中的欄位名稱。 如果參照的欄位是 foreigntable 的主索引鍵,則可省略此子句。


備註

您可以按照欄位的資料類型規格,立即在 ALTER TABLE 或 CREATE TABLE 陳述式的欄位定義子句中使用單一欄位限制式語法。

多欄位限制式語法則適用於在 ALTER TABLE 或 CREATE TABLE 陳述式中的欄位定義子句外部使用保留字 CONSTRAINT 的情況。

您可以使用 CONSTRAINT 將欄位指定為下列任何一種類型的限制式:

  • UNIQUE 保留字可用於將欄位指定為唯一索引鍵。 這表示資料表中不得有任何記錄在此欄位包含相同的值。 您可以將任何欄位或欄位清單限定為唯一。 如果多欄位限制式指定為唯一索引鍵,索引中所有欄位的合併值就必須是唯一,即使兩筆或多筆記錄在其中一個欄位中包含相同值。

  • PRIMARY KEY 保留字可用於將資料表中的單一欄位或一組欄位指定為主索引鍵。 主索引鍵中的所有值都必須是唯一,且不得為 Null;資料表只能有一個主索引鍵。

    附註: 請勿在已經包含主索引鍵的資料表中設定 PRIMARY KEY 限制式;如果您這麼做,則會發生錯誤。

  • FOREIGN KEY 保留字可用於將欄位指定為外部索引鍵。 如果外部資料表的主索引鍵包括多個欄位,您就必須使用多欄位限制式定義,按照參照欄位的排列順序列出所有參照欄位、外部資料表名稱,以及外部資料表中的參照欄位名稱。 如果參照的欄位是外部資料表的主索引鍵,則不必指定參照欄位。 根據預設值,資料庫引擎會將外部資料表的主索引鍵當成參照欄位。

    外部索引鍵限制式會定義要在對應的主索引鍵值變更時執行的特定動作:

  • 您可以根據對已定義 CONSTRAINT 之資料表中的主索引鍵所執行的對應動作,指定要對外部資料表執行的動作。 例如,假設 Customers 資料表的定義如下所示:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

請考慮以下的 Orders 資料表定義,它定義了參照 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 子句表示如果 Customer 資料表中的客戶識別碼 (CustId) 有更新,更新會透過 Orders 資料表串聯。 所有包含對應之客戶識別碼值的訂單都會自動以新值更新。 ON DELETE CASCADE 子句表示如果將某個客戶從 Customer 資料表刪除,Orders 資料表中含有相同客戶識別碼值的 的所有列都將一併刪除。

考慮 Orders 資料表的下列不同定義,亦即使用 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 子句表示如果 Customer 資料表中的客戶識別碼 (CustId) 更新,Orders 資料表中對應的外部索引鍵值將自動設定為 NULL。 同樣地,ON DELETE SET NULL 子句表示如果將某個客戶從 Customer 資料表刪除,Orders 資料表中所有對應的外部索引鍵都將自動設定為 NULL。

為避免系統自動針對外部索引鍵建立索引,可以使用修飾字元 NO INDEX。 這種外部索引鍵定義僅適用於產生的索引值經常重複的情況。 如果外部索引鍵索引值經常重複,使用索引的效率就會比執行資料表掃描來得差。 維護這種類型的索引 (在資料表中插入和刪除列) 會導致效能下降,且無法提供任何優點。



需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×