sql数据库怎么设置外键

说实话,一开始我对外键很困惑,但实际使用一次后我终于明白了。
例如,上次我为客户构建了一个系统。
在他们的电子商务网站上,产品表和订单表之间的关系是通过外键连接的。

首先我们讲一下确定主表和子表的步骤。
我看了一下需求文档,看到订单必须知道它对应的是哪个产品,所以订单表必须是次表,产品表必须是主表。
这并不难,但是你必须清楚地看到哪个表存储了引用的数据。
我有一个朋友,从事旅游业。
他们把酒店版块设置为主版块,预订版块设置为副版块,因为预订需要链接到酒店。

最重要的是选择列时。
辅助表中的列必须与主表中相应的列具有相同的数据类型。
我记得在上一个电商项目中,产品表中的产品ID是INT类型的。
在有序表中创建外键时,我必须编写 INT 而不是 VARCHAR。
我这一步出错了,创建外键的时候直接报错。
我当时确实拔了几根头发。
一件不幸的事情是父列最好是主键或唯一键,这样性能最好。
一位老人告诉我,他以前没有注意到父列只是一个普通的字段。
因此,使用外键关联查找数据非常慢。
最后,他改变了索引,这样它就起作用了。

起初我还错误地编写了 ALTER TABLE 语句来创建外键。
ON DELETE 和 ON UPDATE 选项尤其令人困惑。
ENABLE CLEAR 有两种类型:CASCADE 和 SET NULL。
前者是先删除主表再删除副表,后者是删除后设置为NULL,但前提是副表的列必须允许NULL。
在一种情况下,我们在设计表时忘记允许 NULL,当我们编写 CASCADE 时它崩溃了。
ON UPDATE 也会发生同样的事情。
上次给客户写信的时候,ON UPDATE CASCADE 写成了 ON UPDATE NO ACTION。
结果客户修改了产品分类后,订单表中对应的ID全乱了,我只好手动改回来。

最好笑的是,我曾经用MySQL写外键,发现SQL Server完全没用。
我实在是哭笑不得。
我在想,尽管基本原理是相同的,但每个实现仍然需要检查文档。

最后,外键是个好东西,但是使用前要考虑清楚需求,尤其是如何设置ON DELETE和ON UPDATE,否则改起来会很麻烦。
我有一个项目建议大家在写之前备份一下外键,免得有一天写错了数据,丢失了所有数据,那叫一场灾难。

如何使用navicat给数据库表添加外键约束

上星期。
使用 Navicat 向 MySQL 表添加外键。

连接到数据库。
选择目标库。
例如,库测试。

右键单击 t_user 表。
选择系列零件设计表。

切换到“外键”选项卡。

看第一列。
这是默认名称。
例如,t_user_ibfk_1
如果你想更改你的名字。
手动编写。
例如 fk_user_school。

看第二列。
单击它旁边的按钮。
选择 t_user 表中的字段。
例如 school_id。

第三栏。
选择一个参考表。
例如,t_school_info。
无需选择当前库。

第四栏。
选择参考字段。
例如,t_school_info 中的 ID。

第五栏。
选择删除和​​更新时的行为。

CASCADE是级联。
删除或修改主表。
然后从表中删除或修改。

RESTRICT 是一种限制。
主表不能删除或更改。
除非先删除表中的相关数据。

单击“保存”。

外键生效。

您可以尝试删除主表数据。
看看是否有错误。

注意。
必须更改应用程序代码。
否则就会出问题。

外键字段和引用字段必须是同一类型。
例如,INT 与 INT。

在mysql中,表的字段是本表的外键,这该如何设置?

嘿嘿,我们来说一下MySQL中如何设置外键。
例如,我们有一个“文件夹表”,其中包含两个字段:文件夹和父文件夹。
folderid 是每个文件夹的唯一标识符。
作为主键,数据类型int(1 1 ),默认值0。
那么父文件夹呢?用于指示父文件夹,也是一个int(1 1 )。
默认值为 NULL。
这样,每个文件夹记录都可以与另一个文件夹记录相关。

设置外键的步骤如下:首先,我们在CREATE TABLE语句中使用CONSTRAINT关键字指定一个约束名称,例如“FK__1 ”。
接下来,使用外键短语引用外键字段的父文件夹,然后使用引用短语引用父表文件夹表的主键字段文件夹。
这样,文件夹表中的每条记录都可以引用另一个文件夹表中的记录,从而创建了层次结构。

但是说实话,设置外键的时候要小心。
必须检查主表中数据的有效性,即主表中必须有外键引用的记录。
如果主表中没有对应的记录,那么当你往从表中插入数据时,就会出现问题,直接抛出错误。

除了文件夹和父文件夹外,您还可以根据需要添加其他字段,如文件夹名称、创建日期等。
总之,这个外键设置非常重要。
如果你理解了,管理数据库中的关系就会容易得多。
我希望当我这么说时你能理解我。