[英]I have to delete some rows from two tables which are connected with a foreign key on the basis of counts
[英]How can I delete rows from table connected with foreign key?
我有帶有列(ID_Song、Title、ID_Artist、ID_Image、ID_Audio)的表格歌曲,其中 ID_Artist、ID_Image、ID_Audio 是外鍵。
帶有列的表藝術家(ID_Artist,名稱)帶有列的表圖像(ID_Image,文件名,擴展名,大小)帶有列(ID_Audio,文件名,擴展名,大小)的表音頻
列songs.ID_Artist 引用Artists.ID_Artist,songs.ID_Image 引用Images.ID_Image 和songs.ID_Audio 引用Audios.ID_Audio,所以當我從表Songs 中刪除一行時,我希望與其他表中該行相關的數據也被刪除,但我不能因為外鍵,有沒有辦法做到這一點?
表歌
CREATE TABLE `songs` (
`ID_Song` int(11) NOT NULL AUTO_INCREMENT,
`SongTitle` varchar(100) NOT NULL,
`ID_Artist` int(11) NOT NULL,
`ID_Img` int(11) NOT NULL,
`ID_SongFile` int(11) NOT NULL,
`Approved` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`ID_Song`),
KEY `ID_Artist` (`ID_Artist`),
KEY `ID_SongFile` (`ID_SongFile`),
KEY `ID_Img` (`ID_Img`),
CONSTRAINT `songs_ibfk_1` FOREIGN KEY (`ID_Artist`) REFERENCES `artists` (`ID_Artist`) ON DELETE CASCADE,
CONSTRAINT `songs_ibfk_2` FOREIGN KEY (`ID_SongFile`) REFERENCES `files` (`ID_File`) ON DELETE CASCADE,
CONSTRAINT `songs_ibfk_3` FOREIGN KEY (`ID_Img`) REFERENCES `images` (`ID_Img`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
表格圖片
CREATE TABLE `images` (
`ID_Img` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`extension` varchar(10) NOT NULL,
`size` float NOT NULL,
PRIMARY KEY (`ID_Img`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
對於給定的架構,您需要在刪除歌曲之前獲取ID_SongFile
和ID_Img
。 假設您要刪除 ID=123 的歌曲。 在純 SQL 中,它可能是:
select ID_SongFile, ID_Img into @file_id, @img_id
from songs
where ID_Song = 123;
delete from songs where ID_Song = 123;
delete from images where ID_Img = @img_id;
delete from files where ID_File = @file_id;
根據您的數據邏輯,“反轉”關系可能會更好。 如果文件和圖像僅與歌曲相關,並且始終是一對一的關系,我會從songs
表中刪除ID_SongFile
和ID_Img
列,並在images
和files
表ID_Song
列作為外鍵。 如果你用ON DELETE CASCADE
定義那些新的 FK,你只需要刪除這首歌,相關的文件和圖像就會“消失”。
您也可以將所有圖像和文件信息存儲在songs
表中。 但恕我直言,列image_name
、 image_extension
、 image_size
、 file_name
、 file_extension
和file_size
看起來不太好。 但這種設計並沒有什么問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.