시스템 변수(System Variables)
시스템 변수는 MySQL 서버의 동작 방식을 제어하는 강타입(strongly typed) 변수입니다. 전역(Global) 변수라고도 불리며, 데이터 타입이 미리 정해져 있어 임의로 타입을 바꿀 수 없습니다.
시스템 변수는 서버 시작 시 전역 범위에서 초기화되며, 그 값은 MySQL 서버가 재시작될 때까지 유지됩니다. 즉, 서버를 재시작하면 설정했던 값은 사라지고 기본값으로 되돌아갑니다(설정 파일 my.cnf/my.ini에 명시하지 않은 경우). 시스템 변수는 @@ 기호가 접두사로 붙는 것이 특징입니다.
-- 현재 서버 버전 확인 SELECT @@version; -- 전역 시스템 변수 값 변경 SET GLOBAL max_connections = 500;
사용자 정의 변수(User-defined Variables)
사용자 정의 변수는 세션(Session)별 변수라고도 불립니다. 시스템 변수와 달리 느슨한 타입(loosely typed) 변수로, 선언 시점에 할당하는 값에 따라 타입이 자동으로 결정됩니다.
사용자 정의 변수는 세션 내에서 초기화되며, 그 값은 해당 세션이 종료될 때까지 유지됩니다. 다른 세션에서는 이 값을 읽거나 수정할 수 없습니다. 사용자 정의 변수는 @ 기호 하나가 접두사로 붙습니다.
-- 사용자 정의 변수 선언 및 값 할당 SET @myVariable = 100; SET @userName = '홍길동'; -- 변수 값 조회 SELECT @myVariable, @userName;
핵심 차이점 요약
| 구분 | 시스템 변수 | 사용자 정의 변수 |
|---|---|---|
| 접두사 | @@ | @ |
| 타입 | 강타입 (미리 정의됨) | 느슨한 타입 (할당 값에 따라 결정) |
| 유지 범위 | 서버 전체 (전역) | 개별 세션 |
| 초기화 시점 | 서버 시작 시 | 세션 내에서 SET 시 |
| 소멸 시점 | 서버 재시작 시 | 세션 종료 시 |
정리하면, @@로 시작하는 시스템 변수는 서버 전체의 설정과 동작을 관리하는 반면, @로 시작하는 사용자 정의 변수는 쿼리 작성 중 임시 값을 저장하고 재사용하기 위한 목적으로 활용됩니다.