CONSTRAINT 子句

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

限制式與索引類似,不同之處在於條件約束還可以用於建立與另一個資料表的關聯圖。

您可以在 ALTER TABLE 和 CREATE TABLE 陳述式中使用 CONSTRAINT 子句建立或刪除條件約束。CONSTRAINT 子句有兩種類型:一種用於在單一欄位上建立條件約束,另一種用於在一個以上的欄位上建立條件約束。

附註: Microsoft Access 資料庫引擎不支援使用的限制式,或任何資料定義語言陳述式,非 Microsoft Access 資料庫時。請改用 DAO 建立的方法。

語法

單一欄位條件約束:

限制式名稱{主索引鍵 |唯一 |NOT NULL |
參考foreigntable [(foreignfield1、 foreignfield2)]
[開啟更新串聯 |設定為 NULL]
[開啟] 刪除串聯 |設定為 NULL]}

多欄位條件約束:

限制式名稱
{主索引鍵 (primary1[, primary2 [,...]]) |
唯一 (unique1[, unique2 [,...]]) |
不 NULL (notnull1[, notnull2 [,...]]) |
外部索引鍵 [索引] (ref1[, ref2 [,...]])參照外部資料表[(foreignfield1 [, foreignfield2 [,...]])]
[開啟更新串聯 |設定為 NULL]
[開啟] 刪除串聯 |設定為 NULL]}

CONSTRAINT 子句包含下列部分:

子句各部分

描述

name

要建立之條件約束的名稱。

primary1primary2

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

unique1unique2

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

notnull1、notnull2

僅限非 Null 值的欄位名稱。

ref1ref2

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

foreigntable

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

foreignfield1foreignfield2

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 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×