-
MySQL 변수 종류DataBase/MySQL 2022. 4. 27. 23:12
1. 사용자 지정변수 (@ 가 앞에 붙습니다.)
사용자 지정 변수(User-defined variables)는 선언하거나 초기화 하지 않고 접근할 수 있습니다. 만약 사용자 정의 변수가 초기화 되지 않았다면 string 타입의 NULL 값이 반환됩니다.
SELECT @var_any_var_name
SET 과 SELECT 문을 사용해서 변수를 초기화 할 수 있습니다.(MySQL 8.0 에서는 SET 을 사용해서 변수를 초기화 할 것을 권장하고 있습니다. SET 외에 변수 초기화는 향후 버전에서 삭제 될 수 있다고 합니다.)
Previous releases of MySQL made it possible to assign a value to a user variable in statements other than SET. This functionality is supported in MySQL 8.0 for backward compatibility but is subject to removal in a future release of MySQL.
SET @start = 1, @finish= 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
사용자 지정 변수는 제한된 데이터 타입으로만 할당할 수 있습니다.
- integer, decimal, floating-point, binary 또는 nonbinary string
- NULL 값
사용자 정의 변수는 세션에 따라 다릅니다. 즉, 사용자 A와 사용자 B는 서로가 만든 변수를 볼 수 없습니다. (하지만 performance schema 의 user_variables_by_thread 에 대한 권한이 있는 사용자는 모든 세션에서 어떤 사용자가 정의한 변수던지 다 볼 수 있습니다.)
2. 지역변수 (앞에 아무것도 붙지 않습니다.)
지역변수(Local variables) 는 선언할 때 DECLARE 문이 앞에 있어야 합니다.
지역변수는 저장 프로시저 내에서 지역 변수 및 입력 매개변수로 사용할 수 있습니다.
DELIMITER // CREATE PROCEDURE sp_test(var1 INT) BEGIN DECLARE start INT unsigned DEFAULT 1; DECLARE finish INT unsigned DEFAULT 10; SELECT var1, start, finish; END; // DELIMITER ; CALL sp_test(5);
만약 DEFAULT 절이 없다면 초기값은 NULL 이 됩니다.
지역변수의 유효한 범위는 선언된 BEGIN ... END 안 까지 입니다.
3. 서버 시스템 변수(@@ 가 앞에 붙습니다.)
MySQL 서버는 초기값으로 설정된 많은 시스템 변수가 있습니다. 이 시스템 변수들은 GLOBAL, SESSION, 타입 중 하나 또는 둘 다(GLOBAL + SESSION) 입니다.
GLOBAL 변수는 서버의 전체 작업에 영향을 미치는 반면 SESSION 변수는 개별 클라이언트 연결에 대한 작업에 영향을 줍니다.
실행 중인 서버에서 사용하는 현재 값을 보려면 SHOW VARIABLES 문 또는 SELECT @@var_name을 사용합니다.
SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;
명령줄이나 옵션 파일에서 옵션을 사용하여 서버 시작 시 설정할 수 있습니다. 대부분은 SET GLOBAL 또는 SET SESSION을 사용하여 서버가 실행되는 동안 동적으로 변경할 수 있습니다.
-- Syntax to Set value to a Global variable: SET GLOBAL sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000; -- Syntax to Set value to a Session variable: SET sort_buffer_size=1000000; SET SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@local.sort_buffer_size=10000;
출처
'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.25