Answers:
FOREIGN KEYS
只要确保您的数据是一致的。
他们没有从效率上改善查询,只是使一些错误的查询失败。
如果您有这样的关系:
CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))
,那么你就不能删除department
,如果它有一些employee
的。
如果你提供ON DELETE CASCADE
的FOREIGN KEY
定义,引用行会自动与引用的那些一起被删除。
作为约束,FOREIGN KEY
实际上会使查询变慢了一点。
从引用表中删除或插入引用表时,需要执行额外的检查。
JOIN
效率可能比使用FULL TABLE SCAN的两个DELETE效率低
使用实际外键的主要好处是确保数据完整性,并能够在修改或删除某些内容时对相关项目设置级联操作。
例如,假设您正在编程一个论坛。您有一个具有主键的“主题”表topics.topic_id
,而您有一个“帖子”表,其中的帖子通过column附加到主题posts.topic_id
,这是主题表的外键。
这种外键关系确保每个帖子都附加到有效主题。如果您唯一的主题的ID为#1,则不可能在数据库中存在与主题#2关联的帖子。数据库确保了这一点。
为了获得级联的好处,您可以对其进行设置,以便在从主题表中删除主题时,数据库自动删除该主题所附的帖子表中的所有帖子。这很好,因为它消除了您必须记住要手动执行的步骤,当您将许多表链接在一起时,该步骤可能会变得非常复杂。使用外键,可以自动清除所有关系。
1.FOREIGN KEYS仅确保您的数据一致。
2.如果对外键定义应用删除级联,则在父行删除时引用行将自动删除。
3.如果我们在Update Cascade上应用外键定义,则在父行更新时,子行将自动更新。
查询:ALTER TABLE子项ADD FOREIGN KEY(parent_id)参考parent(id)ON UPDATE CASCADE ON DELETE CASCADE;