Microsoft Jet SQL中文参考手册 |
返回手册首页 | VBScript中文手册 | asp之家 |
限制和索引相似,虽然限制也能被用于建立和另一个表的关联。
用 ALTER TABLE 和 CREATE TABLE 语句中的 CONSTRAINT 子句来建立或删除条件.CONSTRAINT 子句可分为两种类型:第一种是在单一字段上创建条件;第二种是在一个以上的字段上创建条件。
注意 Microsoft Jet 数据库引擎并不支持使用 CONSTRAINT ,或任何非 Microsoft JET 数据库的数据定义语言 (DDL) 语句。而使用 DAO创建方法。
单一字段条件:
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,可以将字段设计为如下的条件类型之一:
注意 在一个已经设有主键的表中,不能再设置 PRIMARY KEY 条件,否则会发生错误。
外部键条件限定具体的活动在一个相应的主键值被改变时来执行:
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
ON UPDATE SET NULL 子句的含义是:如果用户的标识符 (CustId) 在用户表中更新,顺序表中相应的外部键值将会被自动设为 NULL。相似地,ON DELETE SET NULL 子句的含义是:如果一个用户被从用户表中删除,顺序表中所有相应的外部键将会被自动设为NULL。
为阻止外部键索引的自动生成,可使用变址器 NO INDEX。这一形式的外部键定义仅用于经常要复制形成索引值的情况。在外部键索引中的数值经常被复制的场合,使用索引不如直接进行表搜索有效。对这种索引和表中插入和删除的行列的维护会降低性能,没有任何好处。
ADD USER 语句 | CREATE USER 或 GROUP 语句 |
ALTER USER 或 DATABASE 语句 | CREATE VIEW 语句 |
ALTER TABLE 语句 | DROP 语句 |
CREATE INDEX 语句 | DROP USER 或 GROUP 语句 |
CREATE PROCEDURE 语句 | GRANT 语句 |
CREATE TABLE 语句 | REVOKE 语句 |
CREATE TABLE 语句,CONSTRAINT 子句示例