Триггер для вставки значения в родительскую таблицу при вставке в дочернюю таблицу
У меня есть две таблицы с конструкцией ниже. Когда я пытаюсь добавить в таблицу книг, я получаю сообщение об ошибке, что я не могу добавить или обновить дочернюю строку, которую я ожидал. Я надеялся, что можно создать триггер для добавления имени издателя в таблицу издателей перед добавлением в таблицу книг.
Я впервые работаю с триггером, и я не уверен, что делаю неправильно, и я не могу найти пример.
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 ;