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