Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 한 클라이언트가 정의한 사용자 정의 변수를 다른 클라이언트가 사용할 수 없는 이유

MySQL 사용자 정의 변수는 연결(Connection) 단위로 관리됩니다

MySQL에서 사용자 정의 변수(User-Defined Variable)는 하나의 클라이언트가 정의하더라도 다른 클라이언트가 이를 보거나 사용할 수 없습니다. 그 이유는 사용자 정의 변수가 연결(Connection)에 종속적이기 때문입니다.

연결별 변수 격리의 원리

MySQL에서 사용자 정의 변수는 @변수명 형태로 선언되며, 해당 변수는 오직 변수를 생성한 클라이언트 세션 내에서만 유효합니다. 즉, 각 클라이언트 연결은 자신만의 독립적인 변수 공간을 가지며, 서버는 연결마다 별도로 변수 값을 저장하고 관리합니다.

예를 들어, 클라이언트 A에서 다음과 같이 변수를 정의했다고 가정해 보겠습니다.

SET @my_var = 100;

이때 클라이언트 B가 동일한 쿼리로 @my_var를 조회하면, 해당 변수는 클라이언트 A의 세션에만 존재하므로 NULL을 반환하게 됩니다.

클라이언트 종료 시 변수 자동 해제

사용자 정의 변수의 수명은 클라이언트 연결과 함께 시작하고 끝납니다. 특정 클라이언트 연결이 종료되면, 그 연결에서 정의된 모든 변수는 자동으로 메모리에서 해제(free)됩니다. 따라서 변수를 영구적으로 저장하거나 다른 세션과 공유하는 용도로는 적합하지 않습니다.

정리

  • 사용자 정의 변수(@변수)는 세션(연결) 범위(scope)를 가집니다.
  • 다른 클라이언트나 새로운 연결에서는 해당 변수에 접근할 수 없습니다.
  • 클라이언트 연결이 끊어지면 모든 사용자 정의 변수는 자동으로 삭제됩니다.

여러 세션 간에 데이터를 공유해야 한다면, 사용자 정의 변수 대신 테이블에 데이터를 저장하거나 전역 시스템 변수(GLOBAL)를 활용하는 것이 올바른 방법입니다.