13.7.4 SET 구문
SETvariable_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=16Mshell>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에서 삭제되었습니다.