|
|
@@ -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/)
|