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
в обоих случаях после выполнения триггера будет равно исходному значению, если условие ложно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д