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 ;

Объяснение кода листинга программы

  1. Создается триггер с именем orders_insertn для таблицы orders.
  2. Триггер срабатывает перед INSERT операцией в таблице orders.
  3. Условие IF NEW.duration> 14 проверяет, что продолжительность заказа больше 14.
  4. Если условие истинно, то значение NEW.duration устанавливается равным 14.
  5. Триггер также срабатывает перед UPDATE операцией в таблице orders.
  6. Условие IF NEW.duration> 14 снова проверяет, что продолжительность заказа больше 14.
  7. Если условие истинно, то значение NEW.duration устанавливается равным 14.
  8. Значение NEW.duration в обоих случаях обозначает новую продолжительность заказа, которую мы хотим установить.
  9. Значение 14 в обоих случаях обозначает продолжительность заказа, которую мы хотим установить вместо большей.
  10. В обоих случаях триггер изменяет значение NEW.duration на 14, если условие истинно.
  11. Значение NEW.duration в обоих случаях после выполнения триггера будет равно 14, если условие истинно.
  12. Значение NEW.duration в обоих случаях после выполнения триггера будет равно исходному значению, если условие ложно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5