13.7.4 SET 구문
SET
variable_assignment
[,variable_assignment
] ...variable_assignment
:user_var_name
=expr
| [GLOBAL | SESSION]system_var_name
=expr
| [@@global. | @@session. | @@]system_var_name
=expr
SET
문은 서버 또는 클라이언트의 작업에 영향을 미치는 각종 변수에 값을 할당합니다.
이 섹션에서는 변수에 값을 할당하기위한 SET
의 사용에 대해 설명합니다. SET
문을 사용하면 다음과 같은 유형의 변수에 값을 할당 할 수 있습니다.
시스템 변수. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오. 시스템 변수는 또한 섹션 5.1.5 "시스템 변수 사용" 에 설명 된대로 서버를 시작할 때도 설정할 수 있습니다.
사용자 정의 변수. 섹션 9.4 "사용자 정의 변수" 를 참조하십시오.
저장 프로 시저 또는 저장 함수의 매개 변수 및 저장 프로그램의 로컬 변수. 섹션 13.6.4 "저장 프로그램 내의 변수" 를 참조하십시오.
다른 컨텍스트에서는 SET
구문의 여러 변형이 사용됩니다.
SET CHARACTER SET
과SET NAMES
는 서버에 연결하는 데 관련된 문자 집합 및 데이터 정렬 변수에 값을 할당합니다.SET ONE_SHOT
복제에 사용됩니다. 이러한 변형은이 섹션의 나머지 부분에서 설명되어 있습니다.SET PASSWORD
계정의 암호를 지정합니다. 섹션 13.7.1.7 "SET PASSWORD 구문" 을 참조하십시오.SET TRANSACTION ISOLATION LEVEL
은 트랜잭션 처리의 격리 수준을 설정합니다. 섹션 13.3.6 "SET TRANSACTION 구문" 을 참조하십시오.
다음의 설명 변수를 설정하는 데 사용할 수있는 각종 SET
구문을 보여줍니다. 이러한 예는 =
할당 연산자를 사용하고 있습니다 만,이 목적은 :=
할당 연산자도 사용할 수 있습니다.
사용자 변수는 @
으로 설명되어 다음과 같이 설정할 수 있습니다. var_name
SET @ var_name
= expr
;
많은 시스템 변수는 동적이며 SET
문을 사용하여 서버가 실행중인 동안 변경할 수 있습니다. 목록 내용은 섹션 5.1.5.2 "동적 시스템 변수" 를 참조하십시오. SET
를 이용하여 시스템 변수를 변경하려면 선택적으로 수식어 앞에하는 var_name
으로 시스템 변수를 참조하십시오.
변수가 전역 변수임을 명시 적으로 지시하기 위하여는 그 이름 앞에
GLOBAL
또는@@global.
을 지정합니다. 전역 변수를 설정하려면SUPER
권한이 필요합니다.변수가 세션 변수임을 명시 적으로 지시하는 그 이름 앞에
SESSION
,@@session.
또는@@
를 넣습니다. 세션 변수를 제대로 설정하는 데 특별한 권한이 필요하지 않습니다. 그러나 예외가 있습니다 (sql_log_bin
등). 클라이언트는 자신의 세션 변수를 변경할 수 있지만 다른 어떤 클라이언트 세션 변수도 변경할 수 없습니다.LOCAL
과@@local.
은SESSION
과@@session.
동의어입니다.수식이 아무것도 없으면,
SET
은 세션 변수를 변경합니다.
SET
문은 쉼표로 구분 된 여러 변수 할당을 포함 할 수 있습니다. 예를 들어, 문은 사용자 정의 변수와 시스템 변수에 값을 할당 할 수 있습니다. 여러 시스템 변수를 설정하면 문에서 가장 최근의 GLOBAL
또는 SESSION
수식이 지정된 한정자가없는 후속 변수에 사용됩니다.
예 :
SET sort_buffer_size = 10000; SET @@ local.sort_buffer_size = 10000; SET GLOBAL sort_buffer_size = 1000000, SESSION sort_buffer_size = 1000000; SET @@ sort_buffer_size = 1000000; SET @@ global.sort_buffer_size = 1000000 @@ local.sort_buffer_size = 1000000;
시스템 변수 @@
구문은 다른 일부 데이터베이스 시스템과의 호환성을 지원하고 있습니다. var_name
세션 시스템 변수를 변경하면 세션이 끝날 때까지 또는 변수를 다른 값으로 변경하기 전까지는 그 값이 적용됩니다. 다른 클라이언트는 변경을 볼 수 없습니다.
글로벌 시스템 변수를 변경하면 그 값은 서버가 재시작 할 때까지 기억되어 새로운 연결에 사용됩니다. (글로벌 시스템 변수를 영구적으로 설정하려면 옵션 파일에 설정해야합니다.) 글로벌 변수에 액세스하는 모든 클라이언트가 변경을 확인할 수 있습니다. 그러나 변경은 변경 후 연결하는 클라이언트의 해당 세션 변수에만 영향을 미칩니다. 글로벌 변수의 변경은 현재 연결된 클라이언트의 세션 변수에 영향을주지 않습니다 ( SET GLOBAL
명령문을 발행하는 클라이언트 세션 변수에 영향을주지 않습니다).
오용을 방지하기 위해 SET SESSION
과에서만 사용할 수있는 변수와 함께 SET GLOBAL
를 사용하거나 전역 변수를 설정할 때 GLOBAL
(또는 @@global.
)를 지정하지 않으며 경우에 MySQL에서 오류가 발생합니다.
SESSION
변수를 GLOBAL
값으로 설정하거나 GLOBAL
값을 컴파일시 MySQL의 기본값으로 설정하거나하려면 DEFAULT
키워드를 사용합니다. 예를 들어, 다음 두 명령문은 max_join_size
의 세션 값을 글로벌 값으로 설정하는데있어서 동일합니다.
SET max_join_size = DEFAULT; SET @@ session.max_join_size = @@ global.max_join_size;
모든 시스템 변수를 DEFAULT
로 설정되는 것은 아닙니다. 그런 경우 DEFAULT
를 사용하면 오류가 발생합니다.
사용자 정의 변수 저장 프로 시저 또는 저장 함수의 매개 변수 또는 저장 프로그램의 로컬 변수에 값 DEFAULT
를 지정할 수는 허용되지 않습니다. 사용자 정의 변수의 경우, 이것은 구문 오류입니다. 또한 MySQL 5.6.6의 시점에서는 매개 변수 또는 로컬 변수의 경우도 마찬가지입니다.
중 하나 @@
한정자를 사용하여 특정 글로벌 시스템 변수 또는 세션 시스템 변수의 값을 식으로 볼 수 있습니다. 예를 들어, 다음과 같이 SELECT
문에서 값을 얻을 수 있습니다.
SELECT @@ global.sql_mode @@ session.sql_mode @@ sql_mode;
@@
과 같은 식으로 시스템 변수를 참조 할 때 (즉, var_name
@@global.
또는 @@session.
을 지정하지 않으면), MySQL은 세션 값이 존재하면 그것을 돌려주고, 그렇지 않으면 글로벌 값을 돌려줍니다. (이것은 항상 세션 값을 참조하는 SET @@
와는 다릅니다.) var_name
= value
SHOW VARIABLES
에 의해 표시되는 일부 변수는 SELECT @@
구문에서 사용할 수없는 경우가 있고, var_name
'알수 없는 시스템 변수 입니다'
로 표시됩니다. 그 경우의 해결 방법으로 SHOW VARIABLES LIKE '
를 사용할 수 있습니다. var_name
'
값 승수를 지정하는 접미사는 서버를 시작할 때 변수를 설정할 때 사용할 수 있지만 런타임에 SET
값을 설정하는 데 사용할 수 없습니다. 한편, SET
을 사용하면 수식을 사용하여 변수의 값을 할당 할 수 있지만, 서버를 시작할 때 변수를 설정할 때 사용할 수 없습니다. 예를 들어, 서버를 시작할 때 다음의 첫 번째 줄은 유효하지만 두 번째 줄은 무효입니다.
shell>mysql --max_allowed_packet=16M
shell>mysql --max_allowed_packet=16*1024*1024
반대로, 실행시 다음 두 번째 줄은 유효하지만 첫 번째 줄은 무효입니다.
mysql>SET GLOBAL max_allowed_packet=16M;
mysql>SET GLOBAL max_allowed_packet=16*1024*1024;
시스템 변수의 이름과 값을 표시하려면 SHOW VARIABLES
문을 사용합니다. ( 섹션 13.7.5.40 "SHOW VARIABLES 구문" 을 참조하십시오.)
다음 목록은 비표준 문법을 가진 SET
옵션 (즉,
구문에서 설정되지 않은 옵션)를 보여줍니다. name
= value
CHARACTER SET {
charset_name
| DEFAULT}이것은 매핑이 지정되어있는 모든 문자열을 클라이언트 사이에 맵합니다. MySQL 소스 배포판의
sql/convert.cc
을 편집하여 새로운 매핑을 추가 할 수 있습니다.SET CHARACTER SET
은 3 개의 세션 시스템 변수를 설정합니다.character_set_client
와character_set_results
은 지정된 문자 세트로 설정되어character_set_connection
는character_set_database
값으로 설정됩니다. 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 를 참조하십시오.기본 매핑 값
DEFAULT
를 사용하여 복원 할 수 있습니다. 이 기본값은 서버 구성에 따라 다릅니다.ucs2
,utf16
및utf32
클라이언트 문자 집합으로 사용할 수 없습니다. 즉, 이들은SET CHARACTER SET
에서는 작동하지 않습니다.NAMES {'
charset_name
' [COLLATE 'collation_name
'] | DEFAULT}SET NAMES
는 3 개의 세션 시스템 변수character_set_client
,character_set_connection
및character_set_results
를 지정된 문자 세트로 설정합니다.character_set_connection
을charset_name
으로 설정하면collation_connection
도charset_name
의 기본 데이터 정렬로 설정됩니다. 옵션COLLATE
절을 사용하면 데이터 정렬을 명시 적으로 지정할 수 있습니다. 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 를 참조하십시오.기본 매핑은
DEFAULT
값을 사용하여 복원 할 수 있습니다. 이 기본값은 서버 구성에 따라 다릅니다.ucs2
,utf16
및utf32
클라이언트 문자 집합으로 사용할 수 없습니다. 즉, 이들은SET NAMES
에서는 작동하지 않습니다.ONE_SHOT
ONE_SHOT
은 내부에서만 사용됩니다. 이것은 MySQL 5.0에서 비추천이며, MySQL 5.6.1에서 삭제되었습니다.