mysql - 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 列以便获得外键?
解决方案
我回答只是为了解决我认为您的问题中最大的疏忽,这与您在这里所说的有关:
它使用列 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)
);
推荐阅读
- sql - 在同一个 SELECT 命令中使用 CASE WHEN?
- php - XML将属性添加到错误的节点
- python-3.x - 在 EC2 上使用 python 脚本将 aws s3 复制到 s3
- algorithm - 迭代二项式系数的时间复杂度是多少?
- excel - 将多个 Access 数据库合并到单个 Excel 电子表格
- swift - 使用未声明的类型“DynamicLink”
- r - 我的 100000 x 200 数据矩阵如何转换为图像?
- java - Apache Arrow Plasma 客户端 - 无法连接到内存存储(UnsatisfiedLinkError)
- python - 在 Django 中建模用户到用户的连接
- python - 无法在 Python 中执行点