드디어 마지막... 하지만 지금 또 제가 뭐 테이블을 중간에 잘 못 만들고 빼먹었는 지 숙제를 못했습니다.. 죄송합니다 ㅠ
1. 스토어드 프로시저
- mysql에서 제공하는 프로그래밍 기능, 동작을 일괄 처리하기 위한 용도로 사용
* 필수 형식
DELIMITER $$ - 프로시저 묶기
CREATE PROCEDURE 스토어드_프로시저_이름( IN 도는 OUT 매개변수 ) - 프로시저 이름 정해줌
BEGIN
SQL 프로그래밍 코드 작성
END $$
DELIMITER;
CALL 스토어드_프로시저_이름(); - 프로시저 호출
DROP 스토어드_프로시저_이름(); - 스토어드 프로시저 삭제
* 입력 매개변수
IN 입력_매개변수_이름 데이터_형식 => 입력 매개변수 지정
CALL 프로시저_이름(전달_값); => 입력 매개변수가 있는 스토어드 프로시저를 실행
* 출력 매개변수
OUT 출력_매개변수_이름 데이터_형식 => 출력 매개변수
CALL 프로시저_이름(@변수명); => 출력 매개변수가 있는 스토어드 프로시저 실행
SELECT @변수명;
* 동적 SQL
- PREPARE 문과 EXECUTE 문을 사용
2. 스토어드 함수와 커서
- 스토어드 함수 : MYSQL에서 제공하는 내장 함수 외에 직접 함수를 만드는 기능을 제공, RETURNS 예약어를 통해 하나의 값을 반환해야 하는 특징을 가짐
* 스토어드 함수의 개념과 형식
DELIMITER $$
CREATE FUNCITON 스토어드_함수_이름(매개변수)
RETURNS 반환형식
BEGIN
프로그래밍 코딩
RETURN 반환값;
END $$
DELIMITER;
SELECT 스토어드_함수_이름();
- 스토어드 함수 생성 권한 허용 : SET GLOBAL log_bin_trust_function_creators = 1;
- 함수의 반환 값을 SELECT ~ INTO ~ 로 저장했다가 사용 할 수 있음
- 함수 삭제 : DROP FUNCTION
* 커서 : 한 행씩 처리되도록 하는 기능
- DECLARE로 선언 할 수 있으며, 그 내용은 SELECT 문
- 행이 끝날 때까지 계속 반복, 행의 끝을 판단하기 위해 endOfRow를 준비하고 값이 TRUE 값인 지 체크하는 방식 사용
3. 자동 실행되는 트리거
트리거 : DML (INSERT, UPDATE, DELETE)
- 자동으로 수행하여 사용자가 추가 작업을 잊어버리는 실수를 방지해줌
- 행 데이터가 삭제 or 수정 되면 기존 데이터를 백업 테이블에 저장 할 수 있게 함
DROP TRIGGER IF EXISTS myTrigger;
DELIMITER $$
CREATE TRIGGER myTrigger => 트리거 이름 지정
AFTER DELETE => DELETE 문이 발생된 이후에 작동하라는 의미
ON trigger_table => 트리거를 부착 할 때 테이블 지정
FOR EACH ROW => 각 행마다 적용 시킴, 트리거에는 항상 써줌
BEGIN
SET @msg = '가수 그룹이 삭제 됨'; => 트리거 실행 시 작동되는 코드
END $$
DELIMITER;
- 트리거는 테이블에 입력 / 수정 / 삭제되는 정보를 백업하는 용도로 활용 할 수 있음