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

说实话,外键使用起来非常方便,但有时也会相当烦人。
之前做电商系统的时候,表之间有很多关系。
如果不添加外键,数据就会像燕麦片一样杂乱无章。

你举的例子很具体。
创建表a时,a_id为主键,a_name可以是任意值。
没什么可说的。
那么b表需要b_id和b_name。
最主要的是b_id应该与a表的a_id匹配。
使用ALTER TABLE添加外键时,写入方法为FOREIGN KEY b_id REFERENCES a(a_id)。
说实话,这里有一点危险。
引用 a(a_id) 后面应该跟着 ON DELETE CASCADE 或 ON DELETE SET NULL。
不然当A表的数据被删除的时候,B表对应的数据就会变成一个挂外键,数据库直接崩溃给你看。

我之前有一个项目,但我忘记添加ON DELETE CASCADE。
结果老板想把A表的数据清掉,天哪,B表几千条数据全没了。
那一幕……咳咳。
所以你看,外键不仅保证插入时可以在a表中找到b_id,还管理删除和更新。
如果a表的a_id没有了,那么b表的b_id也需要更改,否则数据库就会出问题。

有趣的是,虽然外键很好,但如果使用太多,它们的性能就会受到影响。
之前给一个百万数据的表添加外键,查询速度下降了5 0%。
定制它并花了很长时间才把它带回来。
所以有时候你要考虑到这一点,没有必要在所有的地方都添加外键。
比如一个日志表,为什么它和其他表强相关?直接添加ID不是很好吗?
我记得当时有Data,我不明白为什么外键在特定场景下会导致索引失败。
后来查资料发现是书写问题。
总之,外键用得好,可以保证数据的一致性;但如果使用不当,它将成为一颗定时炸弹。

数据库不用命令如何约束外键

嘿,我们来谈谈数据库管理工具。
如今,如果您想在创建表时约束外键,您不再需要处理命令行。
直接使用phpMyAdmin、MySQL Workbench等图形化管理工具,只需点击几下即可完成。
作为示例,我们以创建“Order”表为例。
这就是我之前所做的。
我直接将Customer ID列设置为外键并将其链接到Customer表的Customer ID主键。
这样以后改变起来就会容易很多。

但说实话,这类数据应该特别关注。
外键引用的列(例如客户 ID)必须与数据表中的主键列具有相同的数据类型。
我已经遇到过这种情况。
一种使用 INT(1 1 ),另一种使用 INT。
结果,外键约束创建失败。
解决方案是统一数据类型。
我当时不明白。
后来我请同事们研究一下这个问题。

如果表已经创建,不用担心:GUI 还可以为您添加外键约束。
例如,当我使用“产品”表时,我添加一个外键约束并将其链接到“类别”表。
操作步骤是找到“添加外键”选项,然后选择目标表和列,然后给约束命名,以便于进一步维护。

请记住,在添加外键约束之前,必须首先检查数据的完整性。
我已经犯了一个错误,没有检查就添加了。
结果系统报错,说数据不符合限制。
后来我不得不花时间纠正这些数据,然后才能成功添加外键约束。

最后,测试也很重要。
添加或更改外键约束后,应尝试执行数据库操作,以确保外键约束真正生效并防止以便数据差异来到您家门口。
我记得有一次我试图将一个不存在的客户ID插入到订单表中,但是系统立即给了我一个错误,所以我松了口气。

总的来说,使用数据库管理工具的可视化界面来创建和管理外键约束确实比使用命令行方便得多。
但数据类型必须一致,数据完整性必须保证。
工作的时候一定要按部就班,一定要做测试,才能有效避免出错。