[MySQL] MySQL Variables(변수) 만들기

황인용·2021년 1월 4일
3

Database

목록 보기
13/16
post-thumbnail

What the MySQL variable!?

흔히 다들 알다시피, variable(변수)란 값을 담아두는 것
SQL에서도 variable(변수)화 시켜서 특정값을 담아두고 사용이 가능
변수를 담는 방법은 크게 3가지
사용자 정의 변수, 지역 변수, 시스템 변수


사용자 정의 변수

사용자가 직접 정의하는 변수로써, 정수, 10진수, 부동 소수점, 2진수 또는 이진문자열 또는 NULL 값과 같은 제한된 데이터 유형 세트에서 값을 지정할 수 있다.
그리고 변수는 세션(Session)단위로 실행이 되기 때문에, 한 클라이언트에서 정의한 사용자 변수는 다른 클라이언트에서 보거나 사용할 수 없다.

사용자 정의 변수 선언_1

SELECT @var;

  • 초기화 하지 않은 변수를 선언 시, 기본 NULL 값을 갖는다.

사용자 정의 변수 선언_2

SET @start = 1, @finish = 10;

SELECT @start := 1, @finish := 10;

  • SET @변수명 을 사용시 = 대입연산자를 사용한다
  • SELECT @변수명 을 사용시 := 과 같은 대입연산자를 사용한다.

사용자 정의 변수 조회 및 활용

SELECT * FROM tb_code WHERE code_cd BETWEEN @start AND @finish;

  • tb_code 테이블에서 code_cd 가 1 부터 10까지 해당하는 데이터를 조회

사용자 정의 변수 참고


지역 변수

지역(로컬)변수는 프로시저(Procedure) 또는 트리거(Trigger) 내에서 로컬 변수 및 입력 매개 변수로 사용할 수 있다.
즉, Declares 내 지역(로컬)변수를 사용함을 의미 한다.

지역 변수 활용

  • 8자리 PK 코드를 생성하는 sequence 함수
DELIMITER ;;
CREATE FUNCTION MySQL.`fn_get_seq_8`(`p_seq_name` VARCHAR(4)) 
RETURNS varchar(8) CHARSET utf8
BEGIN
    DECLARE RTN_VAL VARCHAR(8);
	
    INSERT INTO MySQL.tb_sequence (seq_name, seq_no)
         values (p_seq_name, LAST_INSERT_ID(1))
    ON DUPLICATE KEY UPDATE seq_no=LAST_INSERT_ID(seq_no+1);
	
    set @ret = row_count();
	
    if @ret = 0 then 
        set RTN_VAL = '0'; 
    else
        SET RTN_VAL = (SELECT CONCAT(p_seq_name,  LPAD(LAST_INSERT_ID(),4,'0'))); 
    end if;
	
	RETURN RTN_VAL;
END ;;
DELIMITER ;

지역 변수 참고:


시스템 변수

MySQL은 기본적으로 선언된 변수들이 존재한다. 이를 시스템 변수라 한다.
시스템 변수는 GLOBAL 또는 세션단위로 사용가능하다.
즉, 서버의 전체 작업과 클라이언트 연결 후 작업등 모든 부분에 영향을 준다.

시스템 변수 선언

-- 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;

시스템 변수 확인

-- 모든 변수 확인
SHOW VARIABLES;

-- 특정 변수 확인
SELECT @@sort_buffer_size;

시스템 변수 참고:

profile
dev_pang의 pang.log

3개의 댓글

comment-user-thumbnail
2021년 4월 4일

유익한 글 감사드립니다.
혹시, 사용자 정의변수 일괄 해제(무효화) 처리는 어떻게 하는지 알고 계신가요?
일일히 null 따위로 값을 재할당 해야 하나 싶어서

1개의 답글