Я пытаюсь создать триггер MySQL, который будет действовать как ограничение CHECK, поскольку он не поддерживается в используемой версии MySQL.
По сути, я делаю базу данных для библиотеки, где табличный книжный кредит - это запись всех займов, которые когда-либо были сделаны.
книжный кредит имеет 4 колонки:
- borrowerNo
: идентификатор заемщика
- copyNo
: идентификатор книги, которая была арендована
- dateOut
: дата аренды книги
- dateDue
: дата выхода книги, всегда 14 дней после даты выхода
Я пытаюсь установить ограничение, когда заемщик не может арендовать более 3 книг одновременно. Вот мой код для триггера:
CREATE TRIGGER maxbooks
BEFORE INSERT OR UPDATE
ON bookloan FOR EACH ROW
BEGIN
IF COUNT(SELECT * FROM bookloan WHERE borrowerNo = NEW.borrowerNo AND dateOut <= NEW.dateOut AND dateDue > NEW.dateOut) >= 3 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Maximum number of book rentals has been reached';
END IF;
END;
Вот сообщение об ошибке, которое я получаю от MySQL:
# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса
около 'ЕСЛИ СЧЕТ (ВЫБЕРИТЕ * ИЗ БУКЛОНА, ГДЕ ЗАМЕСТИТЕЛЬ
NEW.borrowerNo AND dateOut <= 'в строке 4 </p>
Я предполагаю, что ошибка из-за функции Count()
, но не знаю, как я могу отформатировать ее, чтобы получить нужную информацию.
Спасибо!