首页 > 解决方案 > MySQL - 我如何获得外键

问题描述

我正在阅读 Head First SQL,并且对外键的使用感到非常困惑。在第 7 章中,它展示了一个使用外键创建新表的示例,如下所示

CREATE TABLE interests(
    int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    interest VARCHAR(50) NOT NULL,
    CONSTRAINT my_contacts_contact_id_fk
    FOREIGN KEY (contact_id)
    REFERENCES my_contacts (contact_id)
);

如果我没记错的话,它会使用列 contact_id 创建表兴趣,这是 my_contacts 表中的外键。然而,当我阅读第 8 章时,这本书要求我们拉出列,例如职业,以创建一个新表以供参考。例如,

        profession
prof_id (primary key) (parent key)
profession VARCHAR(20)

        my_contacts
contact_id (primary key)
prof_id (foreign key)

my_contacts.prof_id 来自哪里?最初 my_contacts 表有职业列,它通过某种魔法以某种方式变成了职业 ID。现在,我有两张桌子

        profession
prof_id (primary key)
profession VARCHAR(20)

        my_contacts
contact_id (primary key)
profession

我是否需要将professional.prof_id 映射到my_contacts,然后删除my_contacts.profession 列以便获得外键?

标签: mysql

解决方案


我回答只是为了解决我认为您的问题中最大的疏忽,这与您在这里所说的有关:

它使用列 contact_id 创建表兴趣,这是 my_contacts 表的外键

向 MySQL 表添加外键约束不会创建列。相反,您仍然需要像创建任何其他列一样为外键创建列。所以,你的CREATE TABLE陈述应该是这样的:

CREATE TABLE interests (
    int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    interest VARCHAR(50) NOT NULL,
    contact_id INT,
    CONSTRAINT my_contacts_contact_id_fk FOREIGN KEY (contact_id)
        REFERENCES my_contacts (contact_id)
);

推荐阅读