Триггер для вставки значения в родительскую таблицу при вставке в дочернюю таблицу

У меня есть две таблицы с конструкцией ниже. Когда я пытаюсь добавить в таблицу книг, я получаю сообщение об ошибке, что я не могу добавить или обновить дочернюю строку, которую я ожидал. Я надеялся, что можно создать триггер для добавления имени издателя в таблицу издателей перед добавлением в таблицу книг.

Я впервые работаю с триггером, и я не уверен, что делаю неправильно, и я не могу найти пример.

create table publishers
    (name varchar(25) not null, 
    address varchar(55), 
    phone varchar(12),
    PRIMARY KEY(name)
    ) ENGINE = INNODB;

create table books
    (book_id int(4) not null auto_increment, 
    title varchar(40), 
    publisher_name varchar(25),
    primary key (book_id),
    foreign key (publisher_name) references publishers(name) ON UPDATE CASCADE ON DELETE CASCADE 
    ) ENGINE=INNODB;

и триггер, который я пытаюсь создать:

DELIMITER ///
CREATE TRIGGER add_publisher BEFORE insert ON books
    FOR EACH ROW
    BEGIN
    INSERT INTO publishers(name) values (books.pubisher_name);
END;
///

DELIMITER ;

1 ответ

Решение

Замените books.publisher_name на NEW.publisher_name.

    DELIMITER ///
    CREATE TRIGGER add_publisher BEFORE insert ON books
        FOR EACH ROW
        BEGIN
        INSERT INTO publishers(name) values (NEW.publisher_name);
    END;
    ///
DELIMITER ;
Другие вопросы по тегам