#혼공학습단 #혼공 #혼자공부하는SQL #혼공S
본 글은 2023년 7월 3일 ~ 2023년 8월 20일까지 진행하는 혼공학습단에 참여하며 정리한 글입니다.
스토어드 프로시저란 SQL 쿼리를 반복하지 않고 로직을 짤 수 있는 것을 말한다. 이에 대해 알아보자.
07-1 스토어드 프로시저 사용방법
•
스토어드 프로시저는 SQL에 프로그래밍 기능을 추가해서 일반 프로그래밍 언어와 비슷한 효과를 낼 수 있음
스토어드 프로시저 기본
•
스토어드 프로시저의 개념과 형식
DELIMITER $$
CREATE PROCEDURE 스토어드_프로시저_이름 ( IN 또는 OUT 매개변수 )
BEGIN
SQL 프로그래밍 코드 작성
END $$
DELIMITER ;
SQL
복사
•
스토어드 프로시저의 실행
CALL 스토어드_프로시저_이름();
SQL
복사
•
스토어드 프로시저의 삭제
DROP PROCEDURE user_proc;
SQL
복사
•
매개변수
◦
입력 매개변수 : 스토어드 프로시저에 값을 전달한다. 형식은 IN 앞에 붙임
◦
출력 매개변수 : 스토어드 프로시저에서 계산된 결과를 돌려받음. 형식은 OUT을 앞에 붙임
◦
동적 SQL : SQL을 생성한 후 실행 → PREPARE 문 / EXECUTE 문을 사용
07-2 스토어드 함수와 커서
•
스토어드 함수 : MySQL에서 제공하는 내장 함수 외에 직접 함수를 만드는 기능 제공
•
커서 : 테이블에서 한 행씩 처리하기 위한 방식
◦
커서는 첫 번째 행을 처리한 후 마지막 행까지 한 행씩 접근해서 값을 처리한다.
◦
커서의 프로세스 방식
1.
커서 선언하기
2.
반복 조건 선언하기
3.
커서 열기
4.
데이터 가져오기 → 데이터 처리하기 [이 부분을 반복]
5.
커서 닫기
커서의 단계별 실습
1.
사용할 변수 준비
DECLARE memNumber INT;
DECLARE cnt INT DEFAULT 0;
DECLARE totNumber INT DEFAULT 0;
-- 행의 끝을 파악하기 위한 변수 endOfRow
-- 처음에는 행의 끝이 아니기 떄문에 False로 초기화
DECLARE endOfRow BOOLEAN DEFAULT FALSE;
SQL
복사
2.
커서 선언하기
DECLARE memberCursor CURSOR FOR
SELECT mem_number FROM member;
SQL
복사
3.
반복 조건 선언하기
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET endOfRow = TRUE;
SQL
복사
4.
커서 열기
OPEN memberCursor;
SQL
복사
5.
행 반복하기
-- 커서의 끝까지 한 행씩 접근해서 반복할 차례.
cursor_loop: LOOP
이 부분을 반복됨
END LOOP cursor_loop
SQL
복사
•
루프 반복 빠져나가기
IF endOfRow THEN
LEAVE cursor_loop;
END IF;
SQL
복사
6.
커서 닫기
CLOSE memberCursor;
SQL
복사
08-2 파이썬과 MySQL의 연동
•
파이썬과 MySQL을 연결하는데에는 pymysql 라이브러리가 필요하다.
•
pymysql을 이용한 기본 연결 format
import pymysql
conn = pymysql.connect(host=호스트_주소, user=유저, password=비밀번호, db=DB이름, charset='utf8')
cur = conn.cursor()
cur.execute("쿼리")
# 데이터를 삽입한 경우
# 데이터를 임시로 저장한 상태이므로 이를 확실하게 저장하는 것을 커밋이라고 한다.
conn.commit()
conn.close()
SQL
복사
[혼공학습단 10기 미션]
기본미션
p. 363 market_db의 고객테이블(member)에 입력된 회원의 정보가 변경될 떄 변경한 사용자, 시간, 변경 전의 데이터 등을 기록하는 트리거 작성하고 인증하기
선택미션
p.402 GUI 응용프로그램 만들고 인증하기