之路教程 https://onitr oad .com

引用完整性(Referential Integrity)

引用完整性意味着表之间的关系是一致的。
MySQL 通过使用外键约束来强制执行引用完整性。
当一个表(子表)有另一个表(父表)的外键时,如果父表中没有相应的记录,MySQL 会阻止我们向子表添加记录。
它还有助于级联更新和删除,以确保对子表所做的更改反映在父表中。

关系决定了 SQL 语句的结果:

  • 对子表的 INSERT(没有父表的外键)未完成。
  • 在连接的列上使用外键可以提高性能。
  • 当我们 UPDATE 或者 DELETE 数据时,可以使用 CASCADE 选项自动更新或者删除链接表中的相关数据。

使用外键(Foreign Keys)

通过使用最常查询的一列或者多列为关系中的每个表指定一个键,如果没有明显的主键,则使用自增值。
主键不是强制性的,但父表中必须有一个索引,以相同的顺序首先列出引用的列。
为了快速连接性能,在连接列上定义外键,并在每个表中用相同的数据类型声明这些列。

引用操作(Referential Action)

如果我们尝试在子列中插入或者更新数据,而该值在父列中不存在,则操作失败。
如果我们尝试更改父列中的值,使得依赖子列会受到该更改的影响,则结果取决于引用操作。

在 FOREIGN KEY 子句的 ON UPDATE 和 ON DELETE 子句中指定引用操作。

  • 默认情况下,插入或者删除操作会失败,并且我们会收到错误消息。这与指定 RESTRICT 或者 NO ACTION 相同。
  • 如果我们使用 CASCADE,外键会将删除或者更新传播到所有受影响的表。
  • 如果使用 SET NULL,则子表的外键列中的值将设置为 NULL,而不是新的父键值。

以下示例通过单列主键关联父表和子表。
外键包含一个 ON DELETE CASCADE 子句,以确保如果我们删除父表中的记录,MySQL 会删除子表中的任何相应记录:

CREATE TABLE parent ( 
id INT NOT NULL, 
PRIMARY KEY (id) 
) ENGINE=INNODB;
CREATE TABLE child (
 id INT, 
 parent_id INT, 
 INDEX par_ind (parent_id), 
 FOREIGN KEY (parent_id) 
     REFERENCES parent(id) 
	 ON DELETE CASCADE 
) ENGINE=INNODB;
如何在MySQL中使用外键实现引用完整性
日期:2020-09-17 00:11:45 来源:oir作者:oir