Mysql SQL:向两个现有(已填充)表添加外键关系

Mysql SQL:向两个现有(已填充)表添加外键关系,mysql,foreign-keys,foreign-key-relationship,Mysql,Foreign Keys,Foreign Key Relationship,我有两个表:一个表是albums表,其中包含专辑名称、作者和流派(以及插入时间戳)。另一个是曲目表,其中包含相册中每个曲目的信息(以及插入时间戳) 今天我意识到我的表中有很多数据是双重的:在tracks表中,我还存储相册和作者姓名,而从另一个表中选择相册和作者姓名会更好,只使用ID引用它们 我知道我可以唯一地识别每个曲目所属的唱片集,因为它有: 相同的专辑名 间隔不超过几秒钟的时间戳 有没有一种方法可以让我创建一个只引用SQL中的相册id的列,或者我需要用PHP编写一个程序来完成这项工作?你

我有两个表:一个表是
albums
表,其中包含专辑名称、作者和流派(以及插入时间戳)。另一个是
曲目
表,其中包含相册中每个曲目的信息(以及插入时间戳)

今天我意识到我的表中有很多数据是双重的:在
tracks
表中,我还存储相册和作者姓名,而从另一个表中选择相册和作者姓名会更好,只使用ID引用它们

我知道我可以唯一地识别每个曲目所属的唱片集,因为它有:

  • 相同的专辑名
  • 间隔不超过几秒钟的时间戳

有没有一种方法可以让我创建一个只引用SQL中的相册id的列,或者我需要用PHP编写一个程序来完成这项工作?

你可以用SQL来完成

  • 将唱片集id添加到曲目表(开始时必须为空)
  • 添加外键
  • 基于某些常用属性(如唱片集名称)更新曲目表
  • 使外键不可为空,可选步骤
e、 g


如果尚未添加album_ID列,我建议使用以下命令:

要添加相册ID,请执行以下操作:

ALTER TABLE albums ADD album_ID VARCHAR(10);
ALTER TABLE tracks ADD album_ID VARCHAR(10);
要添加外键,请执行以下操作:

ALTER TABLE tracks ADD FOREIGN KEY (album_ID) REFERENCES albums(album_ID);
要删除相册名和作者名,请执行以下操作:

ALTER TABLE tracks DROP COLUMN album_name;
ALTER TABLE tracks DROP COLUMN author_name;

然后在两个表中填充相册ID

你在回答中遗漏了很多步骤,这可能会让他头疼。
ALTER TABLE tracks DROP COLUMN album_name;
ALTER TABLE tracks DROP COLUMN author_name;