gpt4 book ai didi

MySQL 外键问题

转载 作者:行者123 更新时间:2023-11-29 19:52:47 25 4
gpt4 key购买 nike

我有3个表:CDSongSong_Details,这是CD之间的关系>歌曲:

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中找到这一行:

外键(Song_Title)引用歌曲(Title)抛出错误1215(HY000):无法添加外键约束;

有人可以根据我的表格帮我看看是什么原因导致了这个问题吗?

最佳答案

有两件事。 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 来访问标题。

关于MySQL 外键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com