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 CASCADE
给FOREIGN 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;
- 你不能删除直接父表,首先从子表中删除外键而不是删除父表。