트리거 생성
: buy테이블의 값이 생성되면 product테이블의 재고량, 판매량이 변동되는 트리거
- 생성 : insert
- 재고량 : amout
- 판매량 : sale_amount
- 예) 홍길동이 에어나시를 3개 구매 => 재고량 -3, 판매량 +3
mysql> drop trigger if exists insert_buy;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> delimiter //
mysql> create trigger insert_buy after insert on buy
-> for each row
-> begin
-> declare _amount int default 0;
-> set _amount = new.amount;
-> update product set
-> amount = amount - _amout,
-> sale_amount = sale_amount + _amount
-> where name = new.product_name;
-> end //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
만든 trigger 확인
- 직접 insert로 넣는 경우
- 만약, select로 찾아 넣는 경우는 불가능 ( trigger을 실행하는 동안 select의 접근을 막음)
mysql> insert into buy(customer, product_name, price, amount)
-> values ('지키미','양털 겨울 코트',50000,5);
Query OK, 1 row affected (0.00 sec)
-- 17번에 주문이 들어간 것을 확인
mysql> select * from buy;
+-----+----------+-------------------+-------+--------+---------------------+
| num | customer | product_name | price | amount | buy_date |
+-----+----------+-------------------+-------+--------+---------------------+
| 1 | 홍길동 | 폴라티셔츠 | 15000 | 3 | 2023-03-24 17:22:02 |
| 2 | 홍길순 | 에어나시 | 9000 | 5 | 2023-03-24 17:22:02 |
| 3 | 이순신 | 양털 겨울 코트 | 50000 | 1 | 2023-03-24 17:22:02 |
| 5 | 동글님 | 순면라운드 반팔티 | 15900 | 3 | 2023-03-27 09:44:58 |
| 6 | 다래 | 순면라운드 반팔티 | 15900 | 3 | 2023-03-27 09:48:31 |
| 7 | 다래 | 폴라티셔츠 | 15000 | 3 | 2023-03-27 10:32:45 |
| 8 | 졸려 | 순면라운드 반팔티 | 15900 | 5 | 2023-03-27 10:33:14 |
| 15 | 홍길동 | 에어나시 | 9000 | 3 | 2023-03-30 15:24:03 |
| 16 | 홍길동 | 에어 나시 | 9000 | 3 | 2023-03-30 15:25:20 |
| 17 | 지키미 | 양털 겨울 코트 | 50000 | 5 | 2023-03-30 15:31:49 |
+-----+----------+-------------------+-------+--------+---------------------+
10 rows in set (0.00 sec)
-- 양털 겨울 코트의 amount가 -5 된 것을 확인
mysql> select * from product;
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
| num | type_a | type_b | name | price | amount | sale_amount | register_data |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
| 1 | 티셔츠 | 긴소매 | 폴라티셔츠 | 15000 | 50 | 0 | 2020-10-15 |
| 2 | 티셔츠 | 반소매 | 순면라운드 반팔티 | 15900 | 50 | 0 | 2020-09-15 |
| 3 | 티셔츠 | 반소매 | 순면라운드 반팔티 | 15900 | 50 | 0 | 2020-09-15 |
| 4 | 티셔츠 | 반소매 | 에어 나시 | 9000 | 47 | 3 | 2020-11-10 |
| 5 | 패션운동복 | 트레이닝상의 | 피트니스상의 | 30000 | 50 | 0 | 2020-11-05 |
| 6 | 패션운동복 | 트레이닝하의 | 피트니스하의 | 50000 | 50 | 0 | 2020-11-06 |
| 7 | 아우터 | 재킷 | 양면 롱 후리스 자켓 | 233000 | 50 | 0 | 2020-11-05 |
| 8 | 아우터 | 패딩 | 롱 패딩 점퍼 | 47400 | 50 | 0 | 2020-11-01 |
| 30 | 아우터 | 코트 | 양털 겨울 코트 | 50000 | 45 | 5 | 2020-10-31 |
+-----+------------+--------------+---------------------+--------+--------+-------------+---------------+
9 rows in set (0.00 sec)