Before и After - MySQL
Формулировка задачи:
Добрый день,подскажите в каких случаях в триггере можно безболезненно заменить BEFORE на AFTER?
ВОТ пример кода
CREATE TRIGGER authors_delete BEFORE DELETE
ON authors FOR EACH ROW
DELETE FROM books WHERE authorId=OLD.id;
CREATE TRIGGER authors_update BEFORE UPDATE
ON authors FOR EACH ROW
UPDATE books SET authorId=NEW.id
WHERE authorId=OLD.id;
CREATE TRIGGER books_delete BEFORE DELETE
ON books FOR EACH ROW
DELETE FROM orders WHERE bookId=OLD.id;
CREATE TRIGGER books_update BEFORE UPDATE
ON books FOR EACH ROW
UPDATE orders SET bookId=NEW.id
WHERE bookId=OLD.Id;
CREATE TRIGGER readers_delete BEFORE DELETE
ON readers FOR EACH ROW
DELETE FROM orders WHERE readerId=OLD.Id;
CREATE TRIGGER readers_update BEFORE UPDATE
ON readers FOR EACH ROW
UPDATE orders SET readerId=NEW.Id
WHERE readerId=OLD.Id;Решение задачи: «Before и After»
textual
Листинг программы
delimiter $$ CREATE TRIGGER orders_insertn BEFORE INSERT ON orders FOR EACH ROW IF NEW.duration> 14 THEN SET NEW.duration = 14; END IF$$ delimiter ; delimiter $$ CREATE TRIGGER orders_insertn BEFORE UPDATE ON orders FOR EACH ROW IF NEW.duration> 14 THEN SET NEW.duration = 14; END IF$$ delimiter ;
Объяснение кода листинга программы
- Создается триггер с именем
orders_insertnдля таблицыorders. - Триггер срабатывает перед
INSERTоперацией в таблицеorders. - Условие
IF NEW.duration> 14проверяет, что продолжительность заказа больше 14. - Если условие истинно, то значение
NEW.durationустанавливается равным 14. - Триггер также срабатывает перед
UPDATEоперацией в таблицеorders. - Условие
IF NEW.duration> 14снова проверяет, что продолжительность заказа больше 14. - Если условие истинно, то значение
NEW.durationустанавливается равным 14. - Значение
NEW.durationв обоих случаях обозначает новую продолжительность заказа, которую мы хотим установить. - Значение
14в обоих случаях обозначает продолжительность заказа, которую мы хотим установить вместо большей. - В обоих случаях триггер изменяет значение
NEW.durationна 14, если условие истинно. - Значение
NEW.durationв обоих случаях после выполнения триггера будет равно 14, если условие истинно. - Значение
NEW.durationв обоих случаях после выполнения триггера будет равно исходному значению, если условие ложно.