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

MySQL 사용자 변수의 핵심 속성 완벽 정리

MySQL의 사용자 변수(User Variable)는 세션 내에서 값을 저장하고 재사용할 수 있는 편리한 기능입니다. 하지만 효과적으로 활용하려면 몇 가지 중요한 속성을 반드시 이해해야 합니다. 지금부터 MySQL 사용자 변수가 가진 네 가지 핵심 속성을 예제와 함께 자세히 살펴보겠습니다.

1. 대소문자를 구분하지 않음

MySQL 사용자 변수는 대소문자를 구분하지 않습니다. 즉, @A@a는 동일한 변수로 취급됩니다. 다만 MySQL 5 버전 이전에는 대소문자가 구분되었으므로, 레거시 시스템을 다룰 때는 이 점에 유의해야 합니다.

예제

mysql> SET @A = 'MySQL';
Query OK, 0 rows affected (0.00 sec)

mysql> Select @A, @a;
+-------+-------+
| @A    | @a    |
+-------+-------+
| MySQL | MySQL |
+-------+-------+
1 row in set (0.00 sec)

위 예제에서 볼 수 있듯이 @A에 값을 할당한 후 @a로 조회해도 같은 값이 반환됩니다. 두 이름이 같은 변수를 가리키기 때문입니다.

2. 클라이언트 연결에 종속됨

사용자 변수는 해당 변수가 선언된 클라이언트 연결(세션)에만 유효합니다. 즉, 하나의 연결에서 설정한 사용자 변수는 다른 연결에서는 접근할 수 없으며, 그 연결이 종료되는 순간 모든 사용자 변수도 함께 사라집니다. 따라서 사용자 변수는 세션 단위의 임시 데이터 저장 용도로 적합합니다.

3. 표현식이 허용되는 위치에서만 사용 가능

사용자 변수는 SQL 문장 내에서 표현식(expression)이 허용되는 곳에서만 사용할 수 있습니다. 상수나 리터럴 식별자가 들어갈 수 있는 자리와는 다르다는 점에 주의해야 합니다. 예를 들어, 테이블 이름처럼 식별자(identifier)가 필요한 위치에는 사용자 변수를 사용할 수 없습니다.

예제

mysql> Set @table_name = CONCAT('tbl_','Employee');
Query OK, 0 rows affected (0.00 sec)

mysql> Create Table @table_name(Id Int);
ERROR 1064 (42000): You have an error in your SQL syntax near '@table_name(Id Int)'

위 예제에서 @table_name 변수에 'tbl_Employee'라는 문자열을 저장했지만, CREATE TABLE 문의 테이블 이름 자리에 사용하려고 하면 구문 오류(ERROR 1064)가 발생합니다. 이는 테이블 이름 자리에는 표현식이 아닌 식별자가 와야 하기 때문입니다.

4. 새로운 값 할당 시 기존 값은 소멸

사용자 변수는 새로운 값이 할당되면 이전 값이 사라집니다. 다시 말해, 하나의 사용자 변수에는 항상 마지막으로 할당된 값만 유지됩니다.

예제

mysql> SET @name = 'Rahul';
Query OK, 0 rows affected (0.00 sec)

mysql> Select @name;
+-------+
| @name |
+-------+
| Rahul |
+-------+
1 row in set (0.00 sec)

현재 @name 변수에는 'Rahul'이라는 값이 저장되어 있습니다. 여기에 'Raman'이라는 새로운 값을 할당하면 어떻게 될까요?

mysql> SET @name = 'Raman';
Query OK, 0 rows affected (0.00 sec)

mysql> Select @name;
+-------+
| @name |
+-------+
| Raman |
+-------+
1 row in set (0.00 sec)

새 값 'Raman'이 할당되는 순간 이전 값 'Rahul'은 완전히 사라지고, 변수에는 최신 값만 남게 됩니다.

정리

MySQL 사용자 변수의 주요 속성을 요약하면 다음과 같습니다.

  • 대소문자 구분 없음: @A와 @a는 동일한 변수로 처리됩니다(MySQL 5 이상).
  • 세션 종속성: 변수는 해당 클라이언트 연결에서만 유효하며, 연결 종료 시 모두 사라집니다.
  • 표현식 전용: 표현식이 허용되는 위치에서만 사용 가능하며, 테이블 이름 등 식별자 자리에는 사용할 수 없습니다.
  • 값 덮어쓰기: 새 값이 할당되면 이전 값은 유지되지 않습니다.

이러한 특성을 잘 이해하고 활용하면 복잡한 쿼리에서 임시 값을 관리하거나 계산 결과를 재사용하는 등의 작업을 더욱 효율적으로 처리할 수 있습니다.