베하!
오랜만이네요 여러분! 그동안 무척 바빴답니다 ㅎㅎ 그리웠다고 말해줘요
오늘 가져온 주제는 프로시저 사용법입니다! 두둥!
많은 분들이 쿼리문을 사용하여 DB의 내용을 조회하거나 변경하는 등의 작업은 익숙하실 거예요.
하지만 프로그래밍처럼 코드를 짜서 DB 서버에 무언가 실행하는 프로시저 방법은 생소할 것이라고 생각하여 들고온 주제입니다.
프로시저(Procedure)란?
본격적으로 설명하기에 앞서 프로시저란 정확하게 무엇일까요.
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합을 의미
데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로, 영구저장모듈(Persistent Storage Module)이라고도 불립니다.
만약 여러 개의 칼럼을 조회하거나, 여러 개의 테이블을 조회하려고 할 때 하나의 긴 쿼리문으로 생성하면 복잡하고 이해하기 힘들다는 불편함이 있을 수 있습니다.
이럴 때 프로시저를 사용하면 메서드 형식으로 만들고 어떤 동작을 일괄적으로 처리할 수 있습니다.
특징으로, 프로시저는 특정 작업을 수행하며 DB 단에서 기술합니다. 하나의 요청으로 여러 SQL문을 실행할 수 있어서 네트워크의 부하를 줄일 수 있습니다. 프로시저는 주로 데이터베이스의 작업을 수행하고 결과를 변경하거나 처리하기 위해 사용됩니다. 과정의 나열이라고 할 수 있겠네요.
프로시저 기초 사용법
root계정이 아닌 일반 사용자 계정에서 Mysql의 프로시저를 생성하려면 특정 권한(CREATE ROUTINE, EXECUTE)이 부여되어야 한다.
1. 프로시저 생성, 수정 권한 부여
GRANT CREATE, ALTER ROUTINE ON DB명.* TO 'user_id';
FLUSH PRIVILEGES;
2. 특정 프로시저 실행 권한 부여
GRANT EXECUTE ON PROCEDURE `db_name`.`procedure_name` TO 'user_id'@'host' ;
FLUSH PRIVILEGES;
프로시저의 예시는 다음과 같습니다.
DELIMITER $$
CREATE PROCEDURE 프로시저명([프로시저 파라미터])
BEGIN
-- SQL 구문
DECLARE NUM INTEGER; -- 변수 선언
SELECT COUNT(*)
INFO NUM -- 변수에 값 할당
FROM tb;
END
$$
DELIMITER ;
BEGIN과 END 사이에 동작시킬 SQL문을 나열하면 됩니다.
DELIMITER는 구문 문자로, 문법의 끝을 나타내는 역할을 합니다.
BEGIN과 END 사이의 SQL 문은 세미콜론을 이용하는데, 이 때 문장을 구분하기 어렵기 때문에 DELIMITER를 이용하여 세미콜론이 아닌 문자로 설정합니다.
생성한 프로시저를 호출하여 사용하는 방법은 아래와 같습니다.
CALL 프로시저명([프로시저 파라미터]);
프로시저를 호출하면 내부적으로, DB 카탈로그에서 프로시저의 이름을 찾아 SQL 컴파일을 진행하여 메모리 공간에 저장한 뒤 실제 실행을 진행하게 됩니다.
오늘은 프러시저의 기초 사용법에 대해 알아보았습니다.
하지만 이게 끝이 아니라구요! IF, CASE, LOOP 같은 제어, 반복문과 IN, OUT, INOUT같은 프로시저 문법에 대해서 다음 시간에 더 자세히 알아보아요!
안녕!!
'Database' 카테고리의 다른 글
Elastic의 벡터 서치를 위한 HNSW와 다중 계층 기능 (0) | 2024.04.30 |
---|---|
Apache Iceberg (0) | 2024.04.08 |
[GA4] 이벤트란? (0) | 2024.01.18 |
Redis의 Node와 Shard (1) | 2024.01.05 |
MySQL 일일 단위 백업 자동화 (0) | 2023.12.29 |
댓글