CONSTRAINT(编程命令)

CONSTRAINT编程命令

CONSTRAINT子句是指限制和索引相似,虽然限制也能被用于建立和另一个表的关联。用ALTERTABLE和CREATETABLE语句中的CONSTRAINT子句来建立或删除条件.CONSTRAINT子句可分为两种类型:第一种是在单一字段上创建条件;第二种是在一个以上的字段上创建条件。

外文名

CONSTRAINT

子句指

限制和索引相似

类别

编程命令

范畴

计算机语言

说明

紧接在字段的数据类型规格之后,在ALTERTABLE或CREATETABLE语句的字段定义子句中,使用单一字段条件之语法。

在ALTERTABLE或CREATETABLE语句中,只要在字段定义子句外使用保留字CONSTRAINT,就应使用多字段约束的语法。[1]

使用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。这一形式的外部键定义仅用于经常要复制形成索引值的情况。在外部键索引中的数值经常被复制的场合,使用索引不如直接进行表搜索有效。对这种索引和表中插入和删除的行列的维护会降低性能,没有任何好处。

约束类型

一共有几种约束类型:

主键约束

要对一个列加主键约束的话,这列就必须要满足的条件就是分空

因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)

以下是代码要对一个列加主键,列名为id,表名为emp

格式为:

altertable表格名称addconstraint约束名称增加的约束类型(列名)

例子:

altertableempaddconstraintpppprimarykey(id)

check约束

就是给一列的数据进行了限制

比方说,年龄列的数据都要大于20的

表名(emp)列名(age)

格式:

altertable表名称addconstraint约束名称增加的约束类型(列名)

例子:

altertableempaddconstraintxxxcheck(age>20)

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)

参考资料

1.CONSTRAINT 子句·微软网

标签: CONSTRAINT