Prechádzať zdrojové kódy

расписал триггеры

Евгений Колесников 5 mesiacov pred
rodič
commit
083ea7fd6a
1 zmenil súbory, kde vykonal 9 pridanie a 2 odobranie
  1. 9 2
      articles/sql_trigger.md

+ 9 - 2
articles/sql_trigger.md

@@ -99,9 +99,12 @@ END;
 - при использовании запроса, затрагивающего N - записей, триггер будет запускаться N - раз;
 - после удаления таблицы, СУБД MySQL автоматически удаляет привязанные к ней триггеры.
 
+Например, напишем триггер, который при продаже товара будет автоматически уменьшать его количество на складе:
+
+>DELIMITER не указан, так как в триггере обошлись одним знаком `;`, а он как раз и является стандартным разделителем SQL-инструкций
+
 ```sql
-create trigger
-sale_item
+create trigger sale_item
 before insert
 on sales
 for each row
@@ -110,6 +113,8 @@ for each row
         where id=NEW.item_id; 
 ```
 
+Но если подумать, то склад у нас не безразмерный, количество товара ограничено. Можно поправить предыдущий запрос, вставив проверку ухода количества в минус, но лучше написать триггер для таблицы склад (мало ли где ещё мы будем менять количество)
+
 ```sql
 delimiter $$
 CREATE trigger 
@@ -125,6 +130,8 @@ end;
 $$
 ```
 
+Здесь, если после изменения количество становится отрицательным, мы генерируем ошибку, которая откатывает всю транзакцию.
+
 ## Транзакции
 
 >Содрано [с хабра](https://habr.com/ru/articles/537594/)