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)
'DB > 명령프롬프트 - mysql' 카테고리의 다른 글
[MySQL] 프로시저 procedure 생성 예제 (in) (0) | 2023.03.31 |
---|---|
[MySQL] 프로시저 procedure (함수) (0) | 2023.03.31 |
[MySQL] table 생성, 데이터 입력 create, insert (0) | 2023.03.30 |
[MySQL] trigger 생성 예제 : after insert, new (함수사용X) (0) | 2023.03.30 |
[MySQL] 트리거 trigger 예제 : before delete, old 사용 (0) | 2023.03.30 |