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 데이터 처리 능력을 크게 향상시킬 수 있습니다.


