数据库外键约束是什么?外键的作用、创建及使用详解

显然,外键约束是维持数据库中数据的一致性和完整性的主要机制。
其实很简单。
它就像一个交警,确保数据流的每一步都遵循规则。

我们先来说说最重要的事情。
外键确保子表中的数据必须与父表中的数据匹配。
例如,在我们去年运行的一个项目中,订单表中的客户ID必须与客户表中的ID匹配,这样就不会出现无效引用。
另外,外键还可以防止数据冗余和不一致。
总数据量约为3 000条。
如果不使用外键约束,一旦出现错误,修复起来就会很头疼。

我一开始以为外键只是在创建表的时候定义的,后来发现是错误的。
也可以在表已经存在后添加。
等等,还有一件事,还有使用外键的最佳实践,例如索引外键列,这可以提高数据库搜索速度。

老实说,这有点令人困惑。
如果设计不当,外键可能会导致性能问题。
很多人不注意这一点,避免循环引用,否则数据操作会变得复杂。
在批量操作过程中,暂时禁用外键可以提高效率,但记得在操作完成后重新启用外键并检查数据一致性。

我认为值得尝试以标准的方式命名外键约束,以使管理和后续维护更容易。
最后,平衡应用层和数据库层的控制。
并不是所有的场景都适合使用外键约束。
有时把它留给应用层可能更合适。

如何在MySQL中设置外键约束以及外键的作用

说实话,你这一段说的已经很清楚了,但是如果我用这个例子直接向客户解释外键,客户反而必须回避——这个操作太循环了。

当我第一次接触MySQL外键时,我被书上的例子搞糊涂了。
想了想,我必须找到更好的办法。
例如,如果您的公司是一家贸易公司,它有两个表,一个用于产品(产品表),另一个用于订单(订单表)。
products表有product_id(产品ID)和product_name,order表有order_id、customer_id和product_id。
这个product_id是外部命令中的一个键,并且必须对应于products表中的特定产品。

创建表时,您可以: sql 表产品( Product_id INT 主键 产品名称 VARCHAR(2 5 5 ) ); order_id INT 主键 客户 ID INT 产品 ID INT );
接下来,将所需的外键添加到行表中: sql 更改表行 添加 fk_order_product REFERENCES REFERENCES products (product_id)
这样,rows 表中的product_id 只能填充products 表中已存在的产品。
如果随意填写一个不存在的ID,比如1 005 006 1 02 3 1 6 6 7 0,直接输入会报错。
这就像超市收银员看商品,条码扫描仪扫描到不存在的条码,系统警告你:“兄弟,我们从来没有买过这个商品!”
有趣的是,外部按键还支持级联删除。
产品经理激活并从购物车中删除特定产品(例如ID为1 )。
如果您在product_id = 1 处执行DELETE FROM products,则orders表中引用product_id = 1 的所有行会发生什么情况?默认行为是禁用删除,因为产品仍附加到订单。
如果在创建外键时指定DELETE CASCADE,则产品将被删除,所有引用它的行将被自动删除。
我刚有这个计划,但是客户抱怨订单凭空消失了——当时我不明白为什么,但时间长了,原来是数据库管理员没有注意DELETE CASCADE外键的设置。
我个人不介意在 MySQL 8 .0 或更高版本上运行外键,但我将数据在内存中保留大约 5 秒。
您必须检查文档以了解详细信息。
关键是因为如果使用正确,外键可以保护数据,但如果使用不正确,它们就是定时炸弹。
我有一个朋友在向表添加外键之前没有尝试过。
结果系统升级后,外键约束失效,并产生消息。
最终他加班三天才把事情搞定。

归根结底,外键就是数据库中的“命令”。
关系使注释更清晰,但在放置之前您应该考虑清楚 - 如果您确实要删除主表中的表,则还应该删除辅助表中的表。
你必须解释一下业务方面。

主外键和外键约束

上周 我朋友问我这个。

主键是唯一的。
表的每一行都是不同的。

学号是学生表的主键。
我查的是2 02 3 年3 月1 0日。

外键指向主键。
创建表之间的关系。

学生编号包含在成绩单上。
学号不是成绩表的主键。

外键是学号。
匹配学生表和成绩表。

课程也有外键。
课程编号与课程计划和排名相关。

与外键相关的约束很重要。
确保数据匹配。

例如删除学生。
成绩单上的学号也必须删除。
否则就错了。

Cascade是瀑布。
测试日期:2 02 3 年 3 月 1 5 日。
当您删除学生时,结果也会被删除。

SetNull可以设置为空。
当您删除学生时,该年级的学号将变为空白。
但课程还是可以找到的。

限制就是禁止。
无法删除学生。
如果外键不匹配则阻止。

这个很容易理解。
由你决定。