之路教程 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;
日期:2020-09-17 00:11:45 来源:oir作者:oir