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

[MySQL] trigger 생성 예제 : update after, old, new

congs 2023. 3. 31. 11:26

trigger 생성  문제

  • attend테이블의 co_code를 update하면 
  • course테이블의 at_co_code 와 attend테이블의 co_code가 연결되어 있으니,
  • co_code에 맞는 old.co_degree는 -1 / new.co_degree는 +1 되는 트리거 생성

 

1. update를 두번 사용하는 방법

mysql> delimiter //
mysql> create trigger update_attend after update on attend
    -> for each row
    -> begin
    -> update course set co_degree = co_degree -1
    -> where co_code = old.at_co_code;
    -> update course set co_degree = co_degree + 1
    -> where co_code = new.at_co_code;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

 

2. if문을 이용하는 방법

delimiter //

create trigger update_attend after update on attend
for each row
begin
update course set co_degree = 
if(co_code=new.at_co_code , co_degree+1, 
if(co_code=old.at_co_code, co_degree-1, co_degree));
end // 

delimiter ;

 

3. case~when~when을 이용하는 방법

delimiter //

create trigger update_attend after update on attend
for each row
begin
update course set co_degree = (
case 
when co_code = new.at_co_code then co_degree +1
when co_code = old.at_co_code then co_degree -1
else co_degree
end);
end // 

delimiter ;

 


 

사용 결과

-- 사용전
mysql> select * from course;
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
| co_code     | co_name        | co_professor | co_point | co_time | co_timetable          | co_pr_num | co_degree |
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
| 20201ipc001 | 컴퓨터개론     | 유관순       |        2 |       2 | 화1A,1B,2A,2B         |         0 |         3 |
| 20201msc001 | 대학수학기초   | 홍길동       |        3 |       3 | 월1A,1B,2A,수1A,1B,2A |         0 |         6 |
| 20202ipc002 | 기초전기       | 이순신       |        3 |       4 | 월1A,1B,2A,목1A,1B,2A |         0 |         2 |
| 20202msc002 | 프로그래밍일반 | 임꺽정       |        3 |       3 | 월1A,1B,2A목1A,1B,2A  |         0 |         6 |
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
4 rows in set (0.00 sec)

-- 사용후 ( co_degree 값 변경 )
mysql> select * from course;
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
| co_code     | co_name        | co_professor | co_point | co_time | co_timetable          | co_pr_num | co_degree |
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
| 20201ipc001 | 컴퓨터개론     | 유관순       |        2 |       2 | 화1A,1B,2A,2B         |         0 |         2 |
| 20201msc001 | 대학수학기초   | 홍길동       |        3 |       3 | 월1A,1B,2A,수1A,1B,2A |         0 |         6 |
| 20202ipc002 | 기초전기       | 이순신       |        3 |       4 | 월1A,1B,2A,목1A,1B,2A |         0 |         2 |
| 20202msc002 | 프로그래밍일반 | 임꺽정       |        3 |       3 | 월1A,1B,2A목1A,1B,2A  |         0 |         7 |
+-------------+----------------+--------------+----------+---------+-----------------------+-----------+-----------+
4 rows in set (0.00 sec)