SQL将外键添加到现有表

时间:2015-07-12 15:52:23

标签: mysql database key

我已经开始阅读SQL了,目前正在阅读Head First SQL书籍,我正在使用MySQL。我已经解释了如何使用外键创建新表并将数据从单个表移动到新表。没有提到的是如何在旧表中创建外键并为其分配fk数据。这些是表格:

my_contacts:
FirstName
LastName
Profession

电话

Profession:
Prof_ID PK
Profession

所以我所做的是在名为Prof_ID的my_contacts中添加一个额外的列并用

填充它
UPDATE my_contacts SET prof_id = (
  SELECT prof_id FROM my_contacts WHERE my_contacts.profession = profession.profession
);

这与2个表中的职业名称完全匹配,并填充my_contacts.prof_id。然后我在这个列上创建了一个约束和一个FK,并删除了my_contacts.profession。

我正在努力解决的问题是声明是如何运作的。从我已经阅读过SQL的过程中,除非特别告诉他们通过order by和group by执行其他操作,否则它将如何实现。那么为什么这个陈述正确匹配?我很难理解它是如何运行数据的,与C#这样的语言不同,我知道事件发生的顺序。这是一个循环语句吗?

感谢您的时间和永远。

1 个答案:

答案 0 :(得分:0)

是的,它就像一个循环。 my_contacts的所有行都会更新,因为WHERE语句中没有UPDATE子句。您使用SELECT语句为my_contacts的每一行找到正确的值。这是有效的,因为my_contacts.profession更改了my_contacts的每一行的值。