-
MySQL 사용자 변수DataBase/MySQL 2022. 4. 25. 18:55
MySQL 사용자 변수
변수명
사용자 변수는 @var_name 으로 표현 됩니다. 변수 이름은 알파벳, 숫자, ., _ 및 $로 구성될 수 있습니다. 사용자 변수 이름은 대소문자를 구분하지 않습니다. 이름의 최대 길이는 64자입니다.
변수명 범위
사용자 변수는 세션에 따라 다릅니다. 특정 클라이언트는 다른 클라이언트가 정의한 사용자 변수를 보거나 사용할 수 없습니다.(하지만 performance schema 의 user_variables_by_thread 에 대한 권한이 있는 사용자는 모든 세션에서 어떤 사용자가 정의한 변수던지 다 볼 수 있습니다.)
변수 해제
클라이언트 세션에 대한 모든 변수는 해당 클라이언트가 종료될 때 자동으로 해제됩니다.
사용 예시
사용자 변수를 만들 수 있는 방법중 하나는 SET 문법을 사용하는 것입니다.
SET @var_name = expr [, @var_name = expr]...
SET 의 경우 = 또는 := 를 할당 연산자로 사용할 수 있습니다.
사용자 변수는 정수, 10진수, 부동 소수점, 2진 또는 2진이 아닌 문자열 또는 NULL 값과 같은 제한된 데이터 유형의 값을 할당할 수 있습니다.
주의사항
소수 및 실수 값 할당은 값의 정밀도나 스케일을 유지하지 않습니다. 허용되는 유형 중 하나가 아닌 유형의 값은 허용되는 유형으로 변환됩니다. 예를 들어, 시간 또는 공간 데이터 유형을 갖는 값은 이진 문자열로 변환됩니다. JSON 데이터 유형의 값은 utf8mb4의 문자 집합과 utf8mb4_bin의 데이터 정렬이 있는 문자열로 변환됩니다.
사용자 변수가 결과로 선택되었다면 클라이언트는 string 타입으로 된 결과를 받습니다. 초기화되지 않은 변수를 참조하면 string 형을 가진 NULL 값을 반환 받습니다.
사용자 변수는 대부분의 표현식에서 사용할 수 있습니다. 예를들어 SELECT 문, LIMIT 절 에서 사용될 수 있습니다.
MySQL의 이전 릴리스에서는 SET 이외의 명령문에서 사용자 변수에 값을 할당할 수 있었습니다. 이 기능은 이전 버전과의 호환성을 위해 MySQL 8.0에서 지원되지만 MySQL의 향후 릴리스에서는 제거될 수 있습니다. 따라서 사용자 변수를 선언 할 땐 SET 명령문을 사용해서 값을 할당 하는 것을 권장합니다.
사용자 변수에 값을 할당할 때는 할당 연산자로 = 대신 := 를 사용하는것이 권장됩니다.
= 는 SET 이외의 명령문에서 비교 연산자로 처리됩니다.
사용자 변수와 관련된 표현식의 평가 순서는 정의되지 않습니다.
예를 들어
SELECT @a, @a:=@a+1
는 @a를 먼저 평가한 다음 할당을 수행한다는 보장은 없습니다.
또한 변수의 결과 type은 명령문의 선언 부분에 있는 type을 기반으로 합니다.
사용자 변수는 데이터 값을 제공하기 위한 것입니다. 테이블이나 데이터베이스 이름이 필요한 컨텍스트에서와 같이 식별자로 또는 식별자의 일부로 또는 SELECT와 같은 예약어로 SQL 문에서 직접 사용할 수 없습니다. 다음 예와 같이 변수가 인용된 경우에도 마찬가지입니다.
mysql> SELECT c1 FROM t; +----+ | c1 | +----+ | 0 | +----+ | 1 | +----+ 2 rows in set (0.00 sec) mysql> SET @col = "c1"; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @col FROM t; +------+ | @col | +------+ | c1 | +------+ 1 row in set (0.00 sec) mysql> SELECT `@col` FROM t; ERROR 1054 (42S22): Unknown column '@col' in 'field list' mysql> SET @col = "`c1`"; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @col FROM t; +------+ | @col | +------+ | `c1` | +------+ 1 row in set (0.00 sec)
식별자를 제공하는 데 사용자 변수를 사용할 수 없다는 원칙의 예외는 나중에 실행할 준비된 명령문으로 사용할 문자열을 구성하는 경우입니다. 이 경우 사용자 변수를 사용하여 명령문의 일부를 제공할 수 있습니다. 다음 예는 이 작업을 수행하는 방법을 보여줍니다.
mysql> SET @c = "c1"; Query OK, 0 rows affected (0.00 sec) mysql> SET @s = CONCAT("SELECT ", @c, " FROM t"); Query OK, 0 rows affected (0.00 sec) mysql> PREPARE stmt FROM @s; Query OK, 0 rows affected (0.04 sec) Statement prepared mysql> EXECUTE stmt; +----+ | c1 | +----+ | 0 | +----+ | 1 | +----+ 2 rows in set (0.00 sec) mysql> DEALLOCATE PREPARE stmt; Query OK, 0 rows affected (0.00 sec)
'DataBase > MySQL' 카테고리의 다른 글
MySQL Begin 과 Start Transaction (0) 2022.12.16 B-Tree 와 B+Tree 의 차이점 (0) 2022.08.02 체인지 버퍼 (0) 2022.08.02 MySQL 변수 종류 (0) 2022.04.27