어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
23.08.18 / [MySQL] 매일 체크해서 컵 연체 상태로 바꾸기 / 이벤트 스케줄러 본문
728x90
[ 조건 ]
- 매일 자정 체크
- cup_return_limit_date 컬럼의 시간과 현재 날짜 비교
- return_status 컬럼의 값이 "N"인 행만 선택 (N = 반납하지 않은 상태 / Y = 반납 완료 / F = 연체)
- 만약 컵 반납 예정일을 지났을 경우 return_status 컬럼의 값을 "F" 로 UPDATE 한다.
// 이벤트 스케줄러 ON/OFF 상태 확인하기
SHOW VARIABLES LIKE 'event%';
// 이벤트 스케줄러 ON/OFF
SET GLOBAL event_scheduler = ON;
이벤트 스케줄러를 ON/OFF 할 때 만약 이 에러가 발생한다면?
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
- SUPER 권한을 갖고 있는 아이디 또는 root 아이디로 로그인해서 실행 혹은 권한 부여하면 됨
-- 만약 이벤트 이름이 존재하지 않으면 이벤트 스케줄러 생성
CREATE EVENT IF NOT EXISTS cup_overdue
-- 이벤트 시작 날짜와 반복 기간
ON SCHEDULE EVERY 1 DAY
STARTS '2023-08-17 00:00:00'
-- COMPLETION PRESERVE : 여러 번 반복 실행
-- COMPLETION NOT PRESERVE : 한 번 실행하고 이벤트 종료
ON COMPLETION PRESERVE
COMMENT 'cup_rental_limit_overdue'
-- 이벤트 실행
DO
UPDATE ks47team03.cup_rental_history
SET return_status = 'F'
WHERE cup_return_limit_datetime < CURDATE()
AND return_status = 'N';
![]() |
![]() |
- 반납 예정일이 똑같이 지난 상황 / 미반납 상태인 컵을 빌린 사용자의 상태만 F 로 UPDATE 되었다.
728x90