我正在阅读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
我是否需要将career.prof_id映射到my_contacts,然后删除my_contacts.profession列,以便获得外键?
答案 0 :(得分:1)
我只是在回答我认为是您的问题中最大的疏忽,这是关于您在这里所说的话:
使用表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)
);