1. MySQL Stored Program
ㅇ 나중에 절차적으로 실행할 수 있도록 서버 측에 저장되는 프로그램들을 총칭
- Stored Function : 수식에 사용되며 계산결과 값 만을 반환
- Stored Procedure : 결과 세트를 생성 및 반환
- Trigger : 테이블이 INSERT,DELETE,UPDATE 될 때에 만 실행됨
- Event : 스케줄러에 저장되고 시간에 의해 실행됨
ㅇ 모두 동일한 문법으로 작성 처리됨
ㅇ 실행 방법
- 저장 함수 실행 : `SELECT 문` 내에서 호출 실행
- 저장 프로시저 실행 : `CALL 프로시저명;`으로 호출 실행
- 이벤트 실행 : `이벤트 스케줄러`를 가동시켜 그에의해 실행
* 외부 텍스트파일 *.sql 실행 : SOURCE 외부파일명;
ㅇ 현재 등록된 Procedure/Function 확인 방법
- Stored Procedure : SHOW PROCEDURE STATUS;
- Stored Function : SHOW FUNCTION STATUS;
2. Event 및 Event Scheduler
ㅇ 이벤트 스케줄러 가동 여부 확인 : SHOW VARIABLES LIKE 'event_scheduler';
ㅇ 서버 기동시 강제 가동 : (my.ini 또는 my.cnf) [mysqld] event_scheduler = ON
- 서버 기동시, 이벤트 스케줄러 스레드가 자동 가동됨
ㅇ 시스템 변수에 의한 가동 : SET GLOBAL EVENT_SCHEDULER = ON;
ㅇ 현재 등록된 이벤트 확인
- 등록된 이벤트들 확인 : SHOW EVENTS;
- 마지막 수행 시간 확인 : INFORMATION_SCHEMA.EVENTS 테이블 내 LAST_EXECUTED 칼럼
ㅇ 이벤트 생성 例)
DROP EVENT IF EXISTS periodic_stat;
CREATE EVENT 이벤트명
ON SCHEDULE
EVERY 30 MINUTE -- 매 30분 마다
-- 1회 만 실행의 경우에는,
-- EVERY 절 대신에. => AT 절을 사용 함
STARTS CURRENT_TIMESTAMP -- 현재 시각(CURRENT_TIMESTAMP)부터 시작 함
-- 또는, SRART '2018-05-15 00:00:00' END '2018-05-15 02:00:00' 처럼
-- 직접적으로 시작 끝의 시각을 명시하는 것도 가능
-- 또는, STARTS '2019-04-08 19:30:00' ENABLE 처럼
-- 시작 시각을 명시하고 그 시각부터 주기적으로 시행하는 것도 가능
DO
CALL 함수명(); -- 별도수행 함수에 의한 호출 실행
-- 단지 1개 쿼리문 또는 별도 프로시저 실행
-- 또는 BEGIN ~ END에 의한 복합절도 가능
3. 주요 문법
ㅇ 주석 (comment) : /* */, #, -- (3 가지)
ㅇ 제어문
- IF 문
IF expression THEN commands
[ELSEIF expression THEN commands ....]
[ELSE commands]
END IF;
- CASE 문
CASE expression
WHEN value THEN statements
[WHEN value THEN statements]
[WHEN value THEN statements]
.
.
[ELSE statements]
END CASE;
ㅇ 반복문
- LOOP ~ END (빠져나가기 : LEAVE, 처음으로가기 : ITERATE)
- REPEAT ~ UNTIL
- WHILE
ㅇ CURSOR
- 1 이상의 결과 set를 return 하기 위해 사용
- DECLARE cname CURSOR FOR SELECT ...
. OPEN : 커서를 사용하기 위해 fetch 전에 반드시 처리
. FETCH : 커서가 다음 row 로 이동
. CLOSE : 커서를 닫아줌