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,就可以使用多重字段条件之语法。

使用 CONSTRAINT,可以将字段设计为如下的条件类型之一:

可以使用 UNIQUE 保留字将字段设计为唯一键。这意味着在同一个表中没有两个记录的这个字段的值是相同的。可以强制任何字段或字段列表为唯一的。如果多重字段条件被设计成唯一键,在索引之中的所有字段的组合值必须也是唯一的,即使在这些字段之中有两个或两个以上的记录有相同的值。

可以用 PRIMARY KEY 保留字,将表中的字段或一组字段设计为主键。在主键之中所有的值必须是唯一的,且不可为 Null,一个表只能有一个主键。

注意 在一个已经设有主键的表中,不能再设置 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

CONSTRAINTCONSTRAINTON UPDATE SET NULL 子句的含义是:如果用户的标识符 (CustId) 在用户表中更新,顺序表中相应的外部键值将会被自动设为 NULL。相似地,ON DELETE SET NULL 子句的含义是:如果一个用户被从用户表中删除,顺序表中所有相应的外部键将会被自动设为NULL。

为阻止外部键索引的自动生成,可使用变址器 NO INDEX。这一形式的外部键定义仅用于经常要复制形成索引值的情况。在外部键索引中的数值经常被复制的场合,使用索引不如直接进行表搜索有效。对这种索引和表中插入和删除的行列的维护会降低性能,没有任何好处。

约束类型

一共有几种约束类型:

主键约束

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

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

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

格式为:

alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

例子:

alter table emp add constraint ppp primary key (id)

————————————————————————————————

check约束

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

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

表名(emp) 列名(age)

格式:

alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

例子:

alter table emp add constraint xxx check(age>20)

______________________________________________________________________

unique约束

这样的约束就是给列的数据追加的不重复的约束类型

格式:

alter table 表名 add constraint 约束名称 约束类型(列名)

比方说可以给ename列加个unique,让ename列的数据不重复

例子:

alter table emp add constraint qwe unique(ename)

————————————————————————————————

默认约束

意思很简单就是让此列的数据默认为一定的数据

格式:

alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

比方说:emp表中的gongzi列默认为10000

alter table emp add constraint jfsd default 10000 for gongzi

————————————————————————————————

外键约束

这个有点难理解了,外键其实就是引用

因为主键实现了实体的完整性,

外键实现了引用的完整性,

应用完整性规定,所引用的数据必须存在!

其实就是个引用,

比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME

id:表示产品的编号

ename:表示产品的名称

另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID

id:表示用户号

did:表示购买的产品号

要让emp表中的did列去引用dept表中的id

可以用下面的方法

格式:

alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)[1]

相关百科
返回顶部
产品求购 求购