MySQL外键问题

时间:2016-11-23 23:52:38

标签: mysql foreign-keys

我有3个表格:CDSongSong_Details这是CDSong之间的关系。 create table Song( ID int not null auto_increment, Title varchar(255) not null, Length float not null, primary key (ID, Title) ); create table CD( Title varchar(255) not null, CD_Number int not null, primary key (Title, CD_Number) ); Create table Song_Details( CD_Title varchar(255) not null, Song_Title varchar(255) not null, Track_Number int not null, primary key(CD_Title, Song_Title), foreign key(CD_Title) references CD(Title), foreign key(Song_Title) references Song(Title) );

Song_Details

我设法在foreign key(Song_Title) references Song(Title)中找到了这一行:

Error 1215(HY000): Cannot add foreign key constraint;正在抛出{{1}}

根据我的表格,有没有人可以帮我看看,这可能导致这个问题?

1 个答案:

答案 0 :(得分:0)

两件事。 auto_increment密钥通常是外键。其次,您需要引用所有键定义为表的主键或唯一键(我不建议对非唯一键进行外键引用,尽管MySQL会全部执行这一点)。

所以:

create table Song (
    Song_ID int not null auto_increment,
    Title varchar(255) not null,
    Length float not null,
    primary key (ID),
    unique (title)
);


create table CD (
    CD_Id int auto_increment primary key,
    Title varchar(255) not null,
    CD_Number int not null,
    unique (Title, CD_Number)
);


Create table Song_Details(
    CD_ID varchar(255) not null,
    Song_Id varchar(255) not null,
    Track_Number int not null,
    primary key(CD_ID, Song_ID),
    foreign key(CD_ID) references CD(CD_ID),
    foreign key(Song_ID) references Song(Song_ID)
);

注意:

  • 使用外键定义的主键关系。
  • 我喜欢让主键包含表名。这样,主键可以与相应的外键具有相同的名称。
  • 不要将标题放在多个地方。它们属于实体表。然后可以使用自动增量ID来访问标题。