DB/명령프롬프트 - mysql 예시

[MySQL] 트리거 trigger 예제 : before delete, old 사용

congs 2023. 3. 30. 17:00

buy 테이블의 값을 삭제하면 product 테이블의 amount, sale_amount 값이 변경되는 트리거 생성

 

⭐ 변수명 설정 유의

  • 트리거나 프로시저(함수) 안에서 변수를 사용하는 경우, declare를 사용하여 선선 후 변수 사용(지역변수 개념)
  • 트리거나 프로시저안에서의 변수는 전역변수(@변수명)을 사용할 수  없음
  • 트리거나 프로시저(함수)안에는 일반적으로 _를 사용하여 일반 칼럼과 구분함

 

trigger 생성

mysql> delimiter //

mysql> create trigger delete_buy before delete on buy
    -> for each row
    -> begin
    -> declare _amount int default 0;
    -> set _amount = old.amount;
    -> update product set
    -> amount = amount + _amount,
    -> sale_amount = sale_amount -  _amount
    -> where name = old.product_name;
    -> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

 

trigger 이용 확인

mysql> delete from buy where num=16;
Query OK, 1 row affected (0.01 sec)

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 |
+-----+----------+-------------------+-------+--------+---------------------+
8 rows in set (0.00 sec)

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 |     50 |           0 | 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)