CONSTRAINT

CONSTRAINT

編程命令
CONSTRAINT子句是指限制和索引相似,雖然限制也能被用于建立和另一個表的關聯。用ALTERTABLE和CREATETABLE語句中的CONSTRAINT子句來建立或删除條件.CONSTRAINT子句可分為兩種類型:第一種是在單一字段上創建條件;第二種是在一個以上的字段上創建條件。
  • 中文名:
  • 外文名:CONSTRAINT
  • 适用領域:
  • 所屬學科:
  • 子句指:限制和索引相似
  • 類别:編程命令
  • 範疇:計算機語言

說明

緊接在字段的數據類型規格之後,在ALTERTABLE或CREATETABLE語句的字段定義子句中,使用單一字段條件之語法。

在ALTERTABLE或CREATETABLE語句中,隻要在字段定義子句外使用保留字CONSTRAINT,就應使用多字段約束的語法。

使用CONSTRAINT,可以将字段設計為如下的條件類型之一:可以使用UNIQUE保留字将字段設計為唯一鍵。

這意味着在同一個表中沒有兩個記錄的這個字段的值是相同的。可以強制任何字段或字段列表為唯一的。如果多重字段條件被設計成唯一鍵,在索引之中的所有字段的組合值必須也是唯一的,即使在這些字段之中有兩個或兩個以上的記錄有相同的值。

可以用PRIMARYKEY保留字,将表中的字段或一組字段設計為主鍵。在主鍵之中所有的值必須是唯一的,且不可為Null,一個表隻能有一個主鍵。注意在一個已經設有主鍵的表中,不能再設置PRIMARYKEY條件,否則會發生錯誤。

您可以使用FOREIGNKEY保留字将一個字段設置為外部鍵。如果外部表的主鍵是由一個以上的字段所組成,則必須使用多重字段條件定義,列出全部的引用字段、外部表名、以及以列出引用字段相同的順序在外部表中列出引用字段的名稱。若所引用的字段是外部表的主鍵,則無須指定所引用的字段。

根據默認,數據庫引擎在認為外部表的主鍵是所引用字段的情況下執行操作。外部鍵條件限定具體的活動在一個相應的主鍵值被改變時來執行:你可以指定外部表上執行的活動,此活動基于一個在定義了CONSTRAINT的表中主鍵上執行的相應的活動。

例如,考慮以下對“客戶”表的定義CREATETABLECustomers(CustIdINTEGERPRIMARYKEY,CLstNmNCHARVARYING(50))考慮表的以下定義,定義外部鍵與Customers表的主鍵關系的順序為

CREATETABLEOrders(OrderIdINTEGERPRIMARYKEY,CustIdINTEGER,OrderNotesNCHARVARYING(255),CONSTRAINTFKOrdersCustIdFOREIGNKEY(CustId)REFERENCESCustomersONUPDATECASCADEONDELETECASCADEONUPDATECASCADE

ONDELETECASCADE子句都定義于外部鍵上。ONUPDATECASCADE子句的含義是:如果用戶的标識符(CustId)在用戶表中更新,此更新将通過順序表級聯。各個含有相應用戶标識符值的順序随着新值自動更新。ONDELETECASCADE子句的含義是:如果一個用戶被從用戶表中删除,順序表中所有包含同樣用戶标識符值的位序也會被删除。考慮到表中下列不同的定義,用SETNULL活動代替CASCADE活動的順序為

CREATETABLEOrders(OrderIdINTEGERPRIMARYKEY,CustIdINTEGER,OrderNotesNCHARVARYING(255),CONSTRAINTFKOrdersCustIdFOREIGNKEY(CustId)REFERENCESCustomersONUPDATESETNULLONDELETESETNULL

ONUPDATESETNULL子句的含義是:如果用戶的标識符(CustId)在用戶表中更新,順序表中相應的外部鍵值将會被自動設為NULL。相似地,ONDELETESETNULL子句的含義是:如果一個用戶被從用戶表中删除,順序表中所有相應的外部鍵将會被自動設為NULL。

為阻止外部鍵索引的自動生成,可使用變址器NOINDEX。這一形式的外部鍵定義僅用于經常要複制形成索引值的情況。在外部鍵索引中的數值經常被複制的場合,使用索引不如直接進行表搜索有效。對這種索引和表中插入和删除的行列的維護會降低性能,沒有任何好處。n

約束類型

一共有幾種約束類型:

主鍵約束

要對一個列加主鍵約束的話,這列就必須要滿足的條件就是分空

因為主鍵約束:就是對一個列進行了約束,約束為(非空、不重複)

以下是代碼要對一個列加主鍵,列名為id,表名為emp

格式為:

altertable表格名稱addconstraint約束名稱增加的約束類型(列名)

例子:

altertableempaddconstraintpppprimarykey(id)n

check約束

就是給一列的數據進行了限制

比方說,年齡列的數據都要大于20的

表名(emp)列名(age)

格式:

altertable表名稱addconstraint約束名稱增加的約束類型(列名)

例子:

altertableempaddconstraintxxxcheck(age>20)n

unique約束

這樣的約束就是給列的數據追加的不重複的約束類型

格式:

altertable表名addconstraint約束名稱約束類型(列名)

比方說可以給ename列加個unique,讓ename列的數據不重複

例子:

altertableempaddconstraintqweunique(ename)

默認約束

意思很簡單就是讓此列的數據默認為一定的數據

格式:

altertable表名稱addconstraint約束名稱約束類型默認值)for列名

比方說:emp表中的gongzi列默認為10000

altertableempaddconstraintjfsddefault10000forgongzi

外鍵約束

這個有點難理解了,外鍵其實就是引用。

因為主鍵實現了實體的完整性,外鍵實現了引用的完整性,應用完整性規定,所引用的數據必須存在!

其實就是個引用,

比方說一個表名稱叫dept裡面有2列數據一列是ID一列是ENAME

id:表示産品的編号

ename:表示産品的名稱

另外一個表格名稱是emp裡面有2列數據,一列是ID一列是DID

id:表示用戶号

did:表示購買的産品号

要讓emp表中的did列去引用dept表中的id可以用下面的方法

格式:

altertable表名addconstraint約束名稱約束類型(列名)references被引用的表名稱(列名)

例子:

altertableempaddconstraintjfkdsjforeignkey(did)referencesdept(id)n

相關詞條

相關搜索

其它詞條