Jet / Access DDL:如何在没有数据完整性检查的情况下创建FOREIGN KEY约束?

时间:2010-11-09 12:53:26

标签: sql ms-access ddl jet

使用Access创建外键约束(通过数据库架构编辑器)时,您可以选择启用或禁用以下选项(实际字幕可能不同,我只有Access的本地化版本可用):

x Enforce data integrity
  x Cascade updates
  x Cascade deletions

在DDL中,后两者可用:

表示
ADD CONSTRAINT Constraint1
  FOREIGN KEY (Field1)
  REFERENCES Table2 (Table2Field1)
  ON UPDATE CASCADE
  ON DELETE CASCADE

但是你如何模拟没有复选框的情况,甚至没有“强制完整性”?

简单地删除“ON UPDATE / ON DELETE”子句仍会产生等效的“强制完整性”约束(因此要求Field1和Table2Field1具有索引)。

3 个答案:

答案 0 :(得分:1)

我认为你正在混淆与ACE / Jet FOREIGN KEY的访问'关系'。

通常,您不能使用SQL DDL来创建Access对象(即使这些对象持久存储在ACE / Jet表中)。另一个例子是验证规则但您可以使用SQL DDL创建CHECK约束(实际上不能以任何其他方式创建)更强大(例如,每个表可以多于一个,可以引用同一个表中的其他行)或者在其他表格等),但验证规则显示在带有CONSTRAINT_TYPE ='CHECK'的adSchemaTableConstraints模式VIEW中。

答案 1 :(得分:0)

如果您不希望执行完整性,那么您实际上不希望约束,因为外键约束的目的是通过公共字段强制实现两个表之间的关系。我可以看到它,如果您不希望执行完整性,级联更新或删除级联,您根本不需要约束。把它关掉。

我认为在某些数据库(例如Oracle)中你可以创建约束但是禁用它 - 但除了纪录片的好处之外,这似乎毫无意义。无法在Access中禁用AFAIK约束,但我可能错了。

分享并享受。

答案 2 :(得分:0)

添加外键约束时使用NOCHECK选项。有关详细信息,请参阅此页:

http://msdn.microsoft.com/en-us/library/ms177463.aspx