关于如何使用 MySQL 的外键构造有什么好的解释吗?
我不能从 MySQL 文档本身中得到它。到目前为止,我一直在处理诸如外键连接和编程代码之类的事情。
问题的第二部分,使用 MySQL 的内置外键是否有任何改进?
关于如何使用 MySQL 的外键构造有什么好的解释吗?
我不能从 MySQL 文档本身中得到它。到目前为止,我一直在处理诸如外键连接和编程代码之类的事情。
问题的第二部分,使用 MySQL 的内置外键是否有任何改进?
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))
, 那么你不能删除 adepartment
如果它有一些employee
's。
如果您提供ON DELETE CASCADE
定义FOREIGN KEY
,引用行将与被引用行一起自动删除。
作为一个约束,FOREIGN KEY
实际上会减慢查询速度。
从引用表中删除或插入引用表时,需要执行额外的检查。
使用真实外键的主要好处是确保数据完整性,并能够在修改或删除某些内容时对相关项目设置级联操作。
例如,假设您正在编写一个论坛。您有一个带有主键的“主题”表topics.topic_id
,并且您有一个“帖子”表,其中帖子附加到带有列的主题,该列posts.topic_id
是主题表的外键。
这种外键关系确保每个帖子都附加到一个有效的主题。如果您拥有的唯一主题具有 ID #1,则不可能在附加到主题 #2 的数据库中存在帖子。数据库确保了这一点。
对于级联的好处,您可以设置它,以便如果从主题表中删除主题,数据库会自动删除帖子表中附加到该主题的所有帖子。这很好,因为它删除了您必须记住手动执行的步骤,当您将许多表链接在一起时,这可能会变得非常复杂。使用外键可以自动清理所有关系。
1.外键只是确保您的数据是一致的。
2.如果我们对外键定义应用删除级联,当父行被删除时,引用行将自动删除。
3.如果我们对外键定义应用更新级联,当父行更新时,子行将自动更新。
查询:ALTER TABLE child ADD FOREIGN KEY(parent_id) REFERENCES parent(id) ON UPDATE CASCADE ON DELETE CASCADE ;
主要优点是您可以限制可以在表格中输入的值;如果您尝试输入引用表中不存在的值,您将无法执行此操作。
此外,如果您更新或删除引用表中的值,您可以将其设置为自动更新值或级联删除包含该值的任何行。
这确实是利用您的代码的一个很棒的功能。