2016-12-10 1 views
2

Я пытаюсь создать простую функцию триггера в своей БД, поэтому я могу изменить значение в одной из моих таблиц при обновлении другого.Как правильно создать триггер в верстаке?

У меня есть база данных с упрощенной библиотекой, а в таблицах указаны boakloan и bookcopy. В bookloan У меня есть внешний ключ bookcopy, где у меня есть столбец isAvailable. Значение defaul этого столбца равно 1 (true), и наличие новой записи в моей таблице bookloan означает, что копия книги заимствована, и она больше не доступна, поэтому я хочу изменить значение isAvailable на 0 (false) для этой записи.

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

Вот мой последний код:

USE `libdb`; 

DELIMITER $$ 

DROP TRIGGER IF EXISTS libdb.bookcopy_update$$ 
USE `libdb`$$ 
CREATE DEFINER=`root`@`localhost` TRIGGER `libdb`.`bookcopy_update` 
BEFORE INSERT 
ON `bookloan` FOR EACH ROW 

BEGIN 

UPDATE bookcopy 
SET bookcopy.isAvailable = 0 
WHERE bookcopy.isAvailable = 1 
AND bookcopy.idBookCopy = bookloan.BookCopy_idBookCopyFK; 


END$$ 
DELIMITER ; 

Может кто-то помочь сделать эту работу?

С текущей версией я получаю следующее сообщение об ошибке: ERROR 1054: 1054: Unknown column 'bookloan.BookCopy_idBookCopyFK' in 'where clause'

+0

Спасибо за ваш комментарий. Да, я изменил эту часть в своем коде перед публикацией здесь, но это все равно не сработает. Сейчас я отредактирую вопрос. –

ответ

1

Вы получаете эту ошибку, потому что в этом запросе (от вашего тела триггера):

UPDATE bookcopy 
SET bookcopy.isAvailable = 0 
WHERE bookcopy.isAvailable = 1 
AND bookcopy.idBookCopy = bookloan.BookCopy_idBookCopyFK; 

нет bookloan определена.

Заменить bookloan.BookCopy_idBookCopyFK на NEW.BookCopy_idBookCopyFK.

+0

Спасибо, это заставило его работать :) Самое смешное, что у меня был этот код в более ранней версии, но другие вещи были неправильными. Очевидно, я понятия не имею, что я делаю –