优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySql基础教学之"外键约束"还不会的同学赶紧收藏

nanyue 2024-12-05 15:01:16 技术文章 8 ℃

导言

外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。


外键约束对子表如此检查处理

在子表上进行INSERT、UPDATE 操作的限制是,要和主表中的主键值匹配,或为NULL, 否则不允许。


外键约束对父表如此检查处理

  • 在父表_上进行UPDATE、DELETE操作的限制,取决于在定义子表的外键时指定的ON UPDATE、ON DELETE子句(不同的DBMS支持的情况不尽相同)。众ON DELETE子 句各选项的作用:
  • 当UPDATE或DELETE操作影响子表中具有匹配父表中的行的键值时,结果取决于ON UPDATE、ON DELETE子句指定的引用动作。引用动作包括
  • CASCADE:从父表中删除或更新该行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义ON UPDATE CASCADE作用于父表或子表中同一列上的多个子句。
  • SET NULL:从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。支持ON DELETE SET NULL和ON UPDATE SET NULL。如果指定SET NULL操作,请确保未将子表中的列声明为NOT NULL。
  • RESTRICT:拒绝父表的删除或更新操作。指定 RESTRIC(或NO ACTION)与省略ON DELETE or ON UPDATE子句相同。
  • NO ACTION:标准SQL中的关键字。在MySQL中,等效于RESTRICT。如果引用表中有相关?的外键值,则MySQL服务器会拒绝父表的删除或更新操作。一些数据库系统具有延迟检查,并且NO ACTION是延迟检查。在MySQL中,外键约束会立即检查,因此NO ACTION与RESTRICT相同。
  • SET DEFAULT:这个动作由MySQL解析器认可,但是InnoDB和NDB都拒绝包含DELETE SET DEFAULT或UPDATE SET DEFAULT子句的表定义。


外键约束总结

外键的用途是确保数据的完整性。它通常包括以下几种:

1、实体完整性,确保每个实体是唯一的(通过主键来实施)

2、域完整性,确保属性值只从一套特定可选的集合里选择

3、关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值。

约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了。

则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。

FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。

如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。

若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。

最近发表
标签列表