1. MySQL 변수 개요
MySQL에서 변수의 역할과 이점
MySQL 변수는 쿼리 내에서 값을 저장하고 여러 쿼리에서 해당 값을 재사용할 수 있게 해 주는 유용한 도구입니다. 이를 통해 동일한 데이터를 반복해서 조회할 필요가 없으며, SQL 문을 더 간결하고 효율적으로 만들 수 있습니다.
MySQL에는 주로 두 가지 유형의 변수가 있습니다:
- 사용자 정의 변수 : 특정 세션 내에서만 사용되는 임시 변수.
- 시스템 변수 : MySQL 서버의 동작을 제어하는 설정 변수.
이 섹션에서는 먼저 사용자 정의 변수를 자세히 살펴보고, 이어서 시스템 변수를 사용하는 방법을 설명합니다.
2. MySQL 변수 유형
2.1 사용자 정의 변수
사용자 정의 변수는 단일 세션에 한정되며 다른 클라이언트에서는 접근할 수 없습니다. 이는 같은 세션 내에서 변수를 안전하게 재사용할 수 있음을 보장합니다. 변수는 @ 기호를 사용하여 선언합니다.
예시:
SET @user_id = 123;
SELECT @user_id;
위와 같이 SET을 사용해 변수를 정의하고 이후 쿼리에서 그 값을 재사용할 수 있습니다. 쿼리 결과를 변수에 저장하는 또 다른 방법은 SELECT INTO입니다.
SELECT name INTO @user_name FROM users WHERE id = @user_id;
2.2 시스템 변수
시스템 변수는 MySQL 서버 설정을 조정하는 데 사용됩니다. 예를 들어, 최대 연결 수를 관리하거나 타임아웃 설정을 구성할 수 있습니다.
예시:
SHOW VARIABLES LIKE 'max_connections';
이 쿼리는 MySQL 서버가 허용하는 동시 최대 연결 수를 표시합니다. 시스템 변수는 SET 명령으로 수정할 수 있으며 전역 또는 세션 수준에서 적용할 수 있습니다.
3. 변수 선언 및 사용
3.1 변수 선언 방법
변수는 SET 또는 SELECT INTO를 사용해 선언할 수 있습니다. SET 구문은 직관적이며 값을 바로 할당할 수 있습니다.
예시:
SET @user_name = 'Sato';
SELECT @user_name;
반면 SELECT INTO를 사용하면 쿼리 결과를 직접 변수에 저장할 수 있습니다.
예시:
SELECT name INTO @user_name FROM users WHERE id = 123;
3.2 쿼리에서 변수 사용
변수를 사용하면 쿼리 내에서 매개변수처럼 재사용할 수 있습니다. 예를 들어, 다음 쿼리는 변수 @user_id를 이용해 사용자 정보를 조회합니다.
예시:
SELECT * FROM users WHERE id = @user_id;
이처럼 변수는 동일 세션 내 여러 쿼리에서 데이터를 유지할 수 있게 해 줍니다.
4. 일반적인 사용 사례
4.1 쿼리 최적화
자주 사용되는 데이터를 한 번 변수에 저장하고 이후 쿼리에서 재사용함으로써 성능을 향상시킬 수 있습니다.
예시:
SELECT MAX(id) INTO @max_id FROM users;
여기서는 최대 사용자 ID를 변수에 저장하고 이후 쿼리에서 재사용합니다.
4.2 날짜·시간 조작 사용 사례
날짜·시간 계산이나 과거 데이터 관리를 위해 변수를 사용하면 시계열 데이터를 다루기가 쉬워집니다.
예시:
SELECT NOW() INTO @current_time;
SELECT @current_time - INTERVAL 1 DAY INTO @yesterday;
이 예에서는 현재 시간과 특정 시간 차이를 변수에 저장하고 다른 쿼리에서 재사용합니다.

5. 저장 프로시저에서 변수 사용
저장 프로시저 내에서 변수를 사용하면 복잡한 로직을 구조화된 방식으로 처리할 수 있으며 코드 재사용성을 높일 수 있습니다. 다음 예는 사용자 정보를 조회하는 저장 프로시저를 보여줍니다.
예시:
CREATE PROCEDURE get_user_info(IN user_id INT, OUT user_name VARCHAR(255))
BEGIN
SELECT name INTO user_name FROM users WHERE id = user_id;
END;
이 프로시저를 호출하면 사용자 ID를 인수로 전달하고 결과를 변수에 저장할 수 있습니다.
6. 변수 사용 시 모범 사례
6.1 초기화의 중요성
변수는 사용 전에 항상 초기화해야 합니다. 초기화되지 않은 변수를 참조하면 NULL이 반환될 수 있습니다. 이는 여러 쿼리에서 동일한 변수를 사용할 때 특히 중요합니다.
6.2 세션 내 범위 관리
사용자 정의 변수는 세션 내에서만 유효합니다. 세션이 종료되면 변수가 재설정됩니다. 세션 간에 변수를 사용해야 하는 경우, 임시 테이블과 같은 대안 접근 방식을 고려하십시오.
7. 고급 기법
7.1 커서를 사용한 데이터 처리
대량의 데이터를 처리할 때, 쿼리 결과를 행 단위로 처리하기 위해 커서를 사용할 수 있습니다. 이는 순차적 처리를 수행하면서 쿼리 결과를 변수에 저장할 수 있게 합니다.
예제:
DECLARE cursor_user CURSOR FOR SELECT id, name FROM users;
커서를 사용하면 여러 행의 데이터를 효율적으로 처리할 수 있습니다.
8. 결론
MySQL 변수를 사용하면 쿼리를 효율적으로 관리하고 코드 가독성과 성능을 모두 향상시킬 수 있습니다. 사용자 정의 변수와 시스템 변수를 적절히 구분하면 더 정교한 데이터 작업을 수행할 수 있습니다. 특히, 저장 프로시저와 커서와 같은 고급 기법과 변수를 결합하면 MySQL의 데이터 처리 기능을 크게 향상시킬 수 있습니다.


