0

我正在使用InnoDB并仍在学习MYSQL。我试图将歌曲链接到专辑。 数据库中是否存在导致问题的东西?下面是我的表格。创建外键时自动增量会影响吗?


Albums 
• albumID – int(11) 
• albumpic – varchar(255) 
• albumthpic – varchar(255) 
• albumTitle – varchar(255) 
• performer – varchar(255) 
• type – set (ex: ep, sp, studio) 
• titletrack – varchar(255) 
• genre 
• releasedate – date 
• distributor – varchar(255) 
• page – varchar(255) 
Songs 
• songID – int(11) 
albumID - int(11) 
• albumpic – varchar(255) 
• tracknum – int(11) 
• songTitle – varchar(255) 
• performer – varchar(255) 
• album – varchar(255) 
• page – varchar(255) 
+2

你的问题是什么? – eggyal

+0

albumID和songID是自动增量。我试图创建一个外键,但是当我尝试链接albumID(在歌曲表中创建)时,它不起作用。 – taeja87

+0

'我的数据库中是否存在导致问题的东西?'......这是什么问题? – Rahul

回答

1

不知道你在找什么,但如果你正在寻找如何创建foriegn键并链接到主表的PK,那么你可以这样做:

create table Songs 
(songID int(11) int not null auto_increment primary key, 
albumpic varchar(255), 
tracknum int(11), 
songTitle varchar(255), 
performer varchar(255), 
album varchar(255), 
page varchar(255), 
albumID int(11), 
foreign key (albumID) references Albums (albumID) on delete cascade) 
+0

你知道如何解决#1064错误? – taeja87

+0

已编辑...错字错误。现在试试。 – Rahul

+0

它工作。谢谢。我想我知道我的桌子为什么不这样做。我在默认情况下有价值,那是否会因为无法链接到PK而出现问题?由于我注意到我从你给我的代码创建的表具有全部的默认值。 – taeja87

2

一个假设每首歌曲(可选)属于一个专辑;在这种情况下,Songs表需要一个外键来引用Albums表中的相关记录。例如,您可以添加一个albumID列:

ALTER TABLE Songs 
    ADD COLUMN albumID int(11) [NOT] NULL, 
    ADD INDEX (albumID), 
    ADD FOREIGN KEY (albumID) REFERENCES Albums (albumID); 

如果每首歌曲可能涉及到多个相册中,你需要创建一个包含两个外键的第三表 - 即一首歌,和他相关的专辑(如songIDalbumID):

CREATE TABLE AlbumSongs (
    songID int(11) NOT NULL, 
    albumID int(11) NOT NULL, 
    PRIMARY KEY (songID, albumID), 
    INDEX (albumID), 
    FOREIGN KEY (songID) REFERENCES Songs (songID), 
    FOREIGN KEY (albumID) REFERENCES Albums (albumID) 
); 
+0

我越来越#1064 – taeja87