这是我的三张table
CREATE TABLE IF NOT EXISTS Song (
song_id INT(10) NOT NULL,
song_name VARCHAR(255) NOT NULL,
lyrics TEXT,
genre_id INT(10) NOT NULL,
year_released INT(10),
FOREIGN KEY gfk_id(genre_id)
REFERENCES Genre(genre_id) ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (song_id)
);
CREATE TABLE IF NOT EXISTS Artist (
artist_id VARCHAR(25) NOT NULL,
artist_fname VARCHAR(10),
artist_lname VARCHAR(10),
PRIMARY KEY (artist_id)
);
create table Song_Artist
(
song_id int(10) NOT NULL,
artist_id varchar(25) NOT NULL,
FOREIGN KEY fk_song(song_id)
REFERENCES Song(song_id) ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY fk_artist(artist_id)
REFERENCES Artist(artist_id) ON DELETE CASCADE
ON UPDATE CASCADE
);
song和artist表具有多对多关系,我使用交叉引用方法,使用名为song\u artist的单独表连接这两个表
我的疑问是,如果我从歌曲表中删除一个记录,那么是否意味着与已删除歌曲(song\u id)相关的相应记录也应该从song\u artist表中删除??或者我应该在song\u artist表中将删除后的song\u id的值设置为null。
我试过用这个扳机
DELIMITER $$
CREATE TRIGGER song_id_delete BEFORE DELETE ON Song
FOR EACH ROW
BEGIN
DELETE FROM Song_Artist
WHERE song_id = OLD.song_id;
END
DELIMITER ;
mysql工作台没有显示这个触发器是创建的。没有显示错误。
1条答案
按热度按时间smdnsysy1#
似乎对我有用;我将genre\u id的默认值设置为0,并删除了fk关系,因为我没有genre表。但你可以看到删除和更新的工作。艺人1和歌曲1更新为10,艺人5和歌曲4删除。
我个人认为宋琰艺术家应该得到一个复合主键;但是你的电话。
问题是在创建歌曲表之前没有创建流派表吗?因此它不能创建fk引用?你说删除不起作用,我对此表示怀疑;并不是说您遇到了表创建错误。。。
演示5.7.12不知道如何调试错误时,我不能重新创建它。