MySQL에서 저장 프로시저(Stored Procedure)와 함수(Function)는 데이터베이스에서 자주 사용되는 중요한 기능입니다.
이 두 기능은 SQL 쿼리 작업을 자동화하고, 반복적인 작업을 효율적으로 처리하는 데 유용합니다.
MySQL에서 저장 프로시저와 함수의 차이점과 활용법을 알려드리겠습니다.
1. 저장 프로시저란?
저장 프로시저(Stored Procedure)는 MySQL에서 여러 SQL 명령어를 하나로 묶어두고, 필요할 때마다 실행할 수 있도록 만든 프로그램입니다. 주로 반복적인 작업을 수행하거나 복잡한 비즈니스 로직을 데이터베이스에서 처리하고자 할 때 사용됩니다.
저장 프로시저의 특징
- 여러 SQL 문을 하나로 묶어 실행할 수 있음
- 트랜잭션 처리나 오류 처리 로직을 포함할 수 있음
- 입력 파라미터와 출력 파라미터를 받을 수 있음
저장 프로시저 생성 예시
DELIMITER //
CREATE PROCEDURE GetUserDetails(IN user_id INT)
BEGIN
SELECT * FROM users WHERE user_id = user_id;
END //
DELIMITER ;
위 예시는 user_id
를 입력받아, 해당 사용자 정보를 반환하는 저장 프로시저입니다. DELIMITER
명령어를 사용하여 MySQL의 기본 세미콜론(;) 구분자를 변경하고, 프로시저의 끝을 정의합니다.
저장 프로시저 실행 예시
CALL GetUserDetails(1);
위 명령어는 저장 프로시저를 실행하여, `user_id`가 1인 사용자의 정보를 조회합니다.
2. 함수(Function)란?
함수(Function)는 MySQL에서 특정 작업을 처리한 후 결과를 반환하는 프로그램입니다. 함수는 일반적으로 값을 계산하고, 그 결과를 반환하는 데 사용됩니다. 저장 프로시저와 달리, 함수는 반드시 값을 반환해야 하며, 쿼리 내에서 직접 호출될 수 있습니다.
함수의 특징
- 값을 반환해야 함
- 쿼리 내에서 사용 가능
- 입력 파라미터를 받을 수 있음
함수 생성 예시
DELIMITER //
CREATE FUNCTION GetUserCount()
RETURNS INT
BEGIN
DECLARE user_count INT;
SELECT COUNT(*) INTO user_count FROM users;
RETURN user_count;
END //
DELIMITER ;
위 예시는 users
테이블의 사용자 수를 계산하여 반환하는 함수입니다. 함수는 RETURNS
키워드를 사용하여 반환 타입을 정의하고, RETURN
명령어를 사용하여 결과를 반환합니다.
함수 실행 예시
SELECT GetUserCount();
위 명령어는 GetUserCount()
함수를 실행하여 사용자 수를 반환합니다. 함수는 SELECT 쿼리 내에서 직접 호출되어 결과를 반환합니다.
3. 저장 프로시저와 함수의 차이점
저장 프로시저와 함수는 비슷한 목적을 가지고 있지만, 몇 가지 중요한 차이점이 있습니다. 각각의 사용 용도를 이해하고 적절한 상황에 맞게 선택하는 것이 중요합니다.
저장 프로시저와 함수의 차이점
특징 | 저장 프로시저 (Stored Procedure) | 함수 (Function) |
---|---|---|
값 반환 | 반환하지 않을 수도 있음 | 반드시 값 반환 |
쿼리 내 사용 | 사용 불가 | 사용 가능 |
트랜잭션 처리 | 가능 | 불가 |
사용 목적 | 여러 작업을 묶어서 실행 | 단일 작업 또는 계산 후 값 반환 |
4. 저장 프로시저와 함수의 활용 예시
저장 프로시저와 함수는 주로 데이터베이스 내에서 복잡한 계산을 처리하거나, 여러 SQL 문을 하나로 묶어 효율적으로 실행하는 데 사용됩니다.
예시 1: 저장 프로시저로 사용자 정보 업데이트
DELIMITER //
CREATE PROCEDURE UpdateUserEmail(IN user_id INT, IN new_email VARCHAR(255))
BEGIN
UPDATE users SET email = new_email WHERE user_id = user_id;
END //
DELIMITER ;
위 예시는 저장 프로시저를 사용하여 특정 사용자의 이메일을 업데이트하는 예입니다. 이를 통해 반복적인 이메일 업데이트 작업을 효율적으로 처리할 수 있습니다.
예시 2: 함수로 나이 계산
DELIMITER //
CREATE FUNCTION CalculateAge(birthdate DATE)
RETURNS INT
BEGIN
RETURN TIMESTAMPDIFF(YEAR, birthdate, CURDATE());
END //
DELIMITER ;
위 예시는 사용자의 생년월일을 기준으로 나이를 계산하는 함수입니다. 이 함수를 쿼리 내에서 호출하여 쉽게 나이를 계산할 수 있습니다.
'개발 > DB' 카테고리의 다른 글
MySQL에서 뷰(View) 생성과 활용법 (2) | 2025.08.03 |
---|---|
MySQL에서 트리거(Trigger) 사용법 (2) | 2025.08.02 |
MySQL의 데이터 타입과 그 활용 (3) | 2025.07.30 |
MySQL에서 데이터 무결성 보장 방법 (2) | 2025.07.29 |
MySQL에서 데이터 정규화와 비정규화 (1) | 2025.07.28 |