我有一个包含两个表GENRES
和SONGS
的数据库。在GENRES
中,PRIMARY KEY
为GENRE_NAME
。我想创建一个触发器,我可以在插入之前添加GENRES
的主键。我尝试过的那个并不起作用。它让我得到错误1452
数据库,表格和触发器
CREATE DATABASE MUSIC_LIBRARY;
USE MUSIC_LIBRARY;
CREATE TABLE GENRES(GENRE_NAME VARCHAR(25),PRIMARY KEY(GENRE_NAME));
CREATE TABLE SONGS(NO INT AUTO_INCREMENT NOT NULL,GENRE VARCHAR(25),
TITLE VARCHAR(25), ARTIST VARCHAR(25), YOUTUBE_URL VARCHAR(50),
PRIMARY KEY(NO), FOREIGN KEY(GENRE) REFERENCES GENRES(GENRE_NAME));
DELIMITER $$
CREATE TRIGGER genre_foreign BEFORE INSERT ON SONGS
FOR EACH ROW
BEGIN
UPDATE GENRES
SET GENRE_NAME=NEW.GENRE;
END;
$$
DELIMITER ;
我试过的插页
INSERT INTO SONGS(GENRE,TITLE,ARTIST,YOUTUBE_URL)
VALUES("METAL","WAR PIGS","BLACK SABBATH","LINK");
错误代码:1452。无法添加或更新子行:外键 约束失败(
music_library
。songs
,CONSTRAINTsongs_ibfk_1
外键(GENRE
)参考genres
(GENRE_NAME
))0.015秒
我没想到会出现这种错误。这就像我添加了更多的单词或其他内容,但它们都是VARCHAR(25)
相同的变量类型。另外,我在没有触发器的情况下手动尝试了它,它有效,所以这就是为什么在我看来这个错误很奇怪。