MySQL 사용자 정의 변수는 연결(Connection) 단위로 관리됩니다
MySQL에서 사용자 정의 변수(User-Defined Variable)는 하나의 클라이언트가 정의하더라도 다른 클라이언트가 이를 보거나 사용할 수 없습니다. 그 이유는 사용자 정의 변수가 연결(Connection)에 종속적이기 때문입니다.
연결별 변수 격리의 원리
MySQL에서 사용자 정의 변수는 @변수명 형태로 선언되며, 해당 변수는 오직 변수를 생성한 클라이언트 세션 내에서만 유효합니다. 즉, 각 클라이언트 연결은 자신만의 독립적인 변수 공간을 가지며, 서버는 연결마다 별도로 변수 값을 저장하고 관리합니다.
예를 들어, 클라이언트 A에서 다음과 같이 변수를 정의했다고 가정해 보겠습니다.
SET @my_var = 100;이때 클라이언트 B가 동일한 쿼리로 @my_var를 조회하면, 해당 변수는 클라이언트 A의 세션에만 존재하므로 NULL을 반환하게 됩니다.
클라이언트 종료 시 변수 자동 해제
사용자 정의 변수의 수명은 클라이언트 연결과 함께 시작하고 끝납니다. 특정 클라이언트 연결이 종료되면, 그 연결에서 정의된 모든 변수는 자동으로 메모리에서 해제(free)됩니다. 따라서 변수를 영구적으로 저장하거나 다른 세션과 공유하는 용도로는 적합하지 않습니다.
정리
- 사용자 정의 변수(
@변수)는 세션(연결) 범위(scope)를 가집니다. - 다른 클라이언트나 새로운 연결에서는 해당 변수에 접근할 수 없습니다.
- 클라이언트 연결이 끊어지면 모든 사용자 정의 변수는 자동으로 삭제됩니다.
여러 세션 간에 데이터를 공유해야 한다면, 사용자 정의 변수 대신 테이블에 데이터를 저장하거나 전역 시스템 변수(GLOBAL)를 활용하는 것이 올바른 방법입니다.