MySQL中的外键基础

有什么好的解释如何使用MySQL的外键构造?

我不完全从MySQL文档自己得到它。 直到现在,我一直在处理像join和编程代码的外键。

而问题的第二部分是否有使用MySQL内置外键的改进?

FOREIGN KEYS只是确保你的数据是一致的。

从效率的angular度来看,它们不会提高查询的效率,而只会让一些错误的查询失败。

如果你有这样的关系:

 CREATE TABLE department (id NOT NULL) CREATE TABLE employee (id NOT NULL, dept_id NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id)) 

,那么如果有一个employee的话就不能删除一个department

如果将ON DELETE CASCADEFOREIGN KEY定义,则引用行将与引用行一起自动删除。

作为一个约束, FOREIGN KEY实际上减慢了查询的速度。

从引用表中删除或插入到引用表中时,需要执行额外的检查。

使用真正的外键的主要好处是确保数据的完整性,并能够在修改或删除某些内容时在相关项目上设置级联操作。

例如,假设你正在编程一个论坛。 你有一个主题topics.topic_id的“主题”表,你有一个“职位”表,其中post附加到主题posts.topic_id ,这是主题表的外键主题。

这种外键关系确保每个post都附加到一个有效的主题。 如果您拥有的唯一主题是ID#1,则不可能在附加到主题#2的数据库中存在post。 数据库确保这一点。

对于级联优势,您可以进行设置,以便在主题表中删除主题时,数据库会自动删除post表中附加到该主题的所有post。 这很好,因为它消除了一个你必须记住要手动完成的步骤,当你有很多表连接在一起时,这可能会变得非常复杂。 使用外键可以自动清除所有关系。

主要优点是您可以限制您可以在表格中input的值。 如果你尝试input一个不存在于被引用表中的值,你将无法做到这一点。

另外,如果更新或删除被引用表中的值,则可以将其设置为自动更新值,或者将包含该值的任何行级联删除。

这确实是利用您的代码的一个很好的function。

外国关键只是确保你的数据是一致的。

2.如果我们将删除级联应用于外键定义,当父行将被删除时,引用行将自动删除。

3.如果我们将Update Cascade应用于外键定义,则在父行更新时,Child行将自动更新。

查询:ALTER TABLE子级ADD FOREIGN KEY(parent_id)REFERENCES父级(ID)ON UPDATE CASCADE ON DELETE CASCADE;

  1. 你不能删除直接父表,首先从子表中删除外键而不是删除父表。