2015-02-18 2 views
0

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

Представьте, что студент библиотеки uni может иметь только 5 активных кредитов одновременно. Как я могу реализовать такой триггер?

Это то, что мы имеем до сих пор:

CREATE DEFINER = CURRENT_USER TRIGGER `bib_db`.`Customer_AFTER_UPDATE` AFTER UPDATE ON `Customer` FOR EACH ROW 

if activeloans <5 
AND Customertype = student 
then 

    SIGNAL sqlstate '45001' set message_text = "You've reached your maximum ammount of loans"; 
ROLLBACK TRANSACTION 
end if ; 
end 

Я мог бы быть далеко, но это, насколько я есть ... Кто-нибудь есть какие-нибудь идеи?

ответ

0

Две важные вещи. Во-первых, вы должны использовать триггер обновления before, чтобы предотвратить обновление. Во-вторых, логика обратная. Что-то подобное:

DELIMITER // 
CREATE DEFINER = CURRENT_USER TRIGGER bib_db.Customer_BEFORE_UPDATE 
BEFORE UPDATE ON `Customer` 
FOR EACH ROW 
BEGIN 
    if activeloans >= 5 AND Customertype = 'student' then 
     SIGNAL sqlstate '45001' set message_text = "You've reached your maximum ammount of loans"; 
    end if ; 
END; 

DELIMITER ; 

конец

+0

Спасибо за awnser! К сожалению, я все еще могу выполнить обновление в клиенте таблицы без появления сообщения об ошибке. Я сейчас использую heidiSQL, хотя я не вижу в этом проблемы ... что-нибудь еще, что я мог бы забыть? – Johan

+0

** Я действительно получил его сейчас, хотя я не могу заставить работать ROLLBACK TRANSACTION. триггера, который работал = НАЧАТЬ если new.AktivaLan> 5 и new.Kundtyp = 'Student', затем SIGNAL SQLSTATE '20001' установлен message_text = "Вы достигли максимальную сумму кредитов"; \t end if; END Пытался добавить синтаксис ROLLBACK, но я получаю сообщение об ошибке: Ошибка SQL (1422): Явная или неявная фиксация не разрешена в хранимой функции или триггере. – Johan

Смежные вопросы