引用完整性

SQL 关系型数据库入门

Timo Grossenbacher

Data Journalist

引用完整性

  • 引用另一张表的记录,必须指向该表中已存在的记录
  • 在两张表之间指定
  • 通过外键强制执行
SQL 关系型数据库入门

引用完整性违规

从表A到表B的引用完整性会被破坏当...

  • ...表B中被表A记录引用的记录被删除。
  • ...在表A中插入引用表B中不存在记录的记录。
  • 外键可防止上述违规!
SQL 关系型数据库入门

处理违规

CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE NO ACTION
);
CREATE TABLE a (
 id integer PRIMARY KEY,
 column_a varchar(64), 
 ...,
 b_id integer REFERENCES b (id) ON DELETE CASCADE
);
SQL 关系型数据库入门

处理违规(续)

ON DELETE...

  • ...NO ACTION:抛出错误
  • ...CASCADE:删除所有引用该记录的记录
  • ...RESTRICT:抛出错误
  • ...SET NULL:将引用列设为 NULL
  • ...SET DEFAULT:将引用列设为默认值
SQL 关系型数据库入门

让我们看一些示例!

SQL 关系型数据库入门

Preparing Video For Download...