我使用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)
答案 0 :(得分:2)
有人假设每首歌曲(可选)属于专辑;在这种情况下,Songs
表需要一个外键来引用Albums
表中的相关记录。例如,您可以添加albumID
列:
ALTER TABLE Songs
ADD COLUMN albumID int(11) [NOT] NULL,
ADD INDEX (albumID),
ADD FOREIGN KEY (albumID) REFERENCES Albums (albumID);
如果单个歌曲可能涉及多个专辑,则需要创建第三个表格,其中包含两个外键 - 一首歌曲及其相关专辑的外键(例如songID
和albumID
):
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)
);
答案 1 :(得分: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)