MySQL :: MySQL 8.0 참조 설명서 :: 13.2.10.1 SELECT … INTO 문

13.2.10.1 SELECT .. . INTO 문

SELECT ... INTO 형식의 SELECT는 변수에 저장되거나 파일에 기록 될 쿼리 결과 :

  • SELECT ... INTO var_list 는 열 값을 선택하여 변수에 저장합니다.

  • SELECT ... INTO OUTFILE는 선택한 행을 파일에 씁니다. 특정 출력 형식을 생성하기 위해 열 및 줄 종결자를 지정할 수 있습니다.

  • SELECT ... INTO DUMPFILE는 형식없이 파일에 단일 행을 기록합니다.

주어진 SELECT 문은 iv id = “로 표시된 것처럼 최대 하나의 INTO 절을 포함 할 수 있습니다. 0db2581f17 “>

구문 설명 (섹션 13.2.10,”SELECT 문 “참조), INTO는 다른 위치에 나타날 수 있습니다.

  • FROM 이전. 예 :

  • 후행 잠금 절 앞. 예 :

  • SELECT. 예 :

위치는 MySQL 8.0.20부터 지원되며 선호되는 위치입니다. 잠금 절 앞의 위치는 MySQL 8.0.20부터 더 이상 사용되지 않습니다. 지원이 제거 될 예정입니다. 에프 MySQL의 uture 버전. 즉, FROM 이후의 INTOSELECT의 끝이 아닌 경고.

iv id = “0db2581f17″과 같은 iv id = “0db2581f17″때문에 INTO 절은 중첩 된 SELECT에서 사용해서는 안됩니다. >

는 결과를 외부 컨텍스트에 반환해야합니다. UNION 문 내에서 INTO 사용에도 제약이 있습니다. 섹션 13.2.10.3, “UNION 절”을 참조하십시오.

INTO var_list 변형의 경우 :

  • var_list는 각각 사용자 정의 변수, 저장 프로 시저 또는 함수 매개 변수가 될 수있는 하나 이상의 변수 목록을 지정합니다. , 또는 저장된 프로그램 로컬 변수 (준비된 SELECT ... INTO var_list 문 내에서 사용자 정의 변수 만 허용됩니다. 섹션 13.6.4.2, “로컬 변수 범위 및 해상도”참조) .)

  • 선택한 값이 변수에 할당됩니다. 변수 수는 열 수와 일치해야합니다. 쿼리는 단일 행을 반환해야합니다. 쿼리가 행을 반환하지 않으면 오류 코드 1329 (No data)와 함께 경고가 발생하고 변수 값은 변경되지 않은 상태로 유지됩니다. 쿼리가 여러 행을 반환하면 오류 1172가 발생합니다 (Result consisted of more than one row). 문이 여러 행을 검색 할 수있는 경우 LIMIT 1를 사용하여 결과 집합을 단일 행으로 제한 할 수 있습니다.

INTO var_list 는 다음 제한에 따라 TABLE 문과 함께 사용됩니다.

  • 변수는 테이블의 열 수와 일치해야합니다.

  • 테이블에 행이 두 개 이상 포함 된 경우 LIMIT 1를 사용하여 결과 집합을 단일 행으로 제한해야합니다. LIMIT 1INTO 키워드 앞에 와야합니다.

예 이러한 문의 내용은 다음과 같습니다.

또한 다음을 생성하는 VALUES 문에서 값을 선택할 수 있습니다. 단일 행을 사용자 변수 세트에 추가합니다. 이 경우 테이블 별칭을 사용해야하며 값 목록의 각 값을 변수에 할당해야합니다. 여기에 표시된 두 문은 각각 SET @x=2, @y=4, @z=8와 동일합니다.

사용자 변수 이름은 대소 문자를 구분하지 않습니다. . 섹션 9.4, “사용자 정의 변수”를 참조하십시오.

SELECTSELECT ... INTO OUTFILE "file_name " 형식 선택한 행을 파일에 씁니다. 파일은 서버 호스트에 생성되므로이 구문을 사용하려면 FILE 권한이 있어야합니다. file_name는 기존 파일이 될 수 없습니다. 이는 무엇보다도 /etc/passwd 및 데이터베이스 테이블과 같은 파일이 수정되는 것을 방지합니다. character_set_filesystem 시스템 변수는 파일 이름의 해석을 제어합니다.

SELECT ... INTO OUTFILE 문은 서버 호스트의 텍스트 파일에 테이블 덤프를 활성화하기위한 것입니다.다른 호스트에서 결과 파일을 생성하려면 SELECT ... INTO OUTFILE는 일반적으로 적합하지 않습니다. 왜냐하면 서버 호스트 파일 시스템에 상대적인 파일 경로를 쓸 방법이 없기 때문입니다. 원격 호스트의 파일은 서버 호스트 파일 시스템의 네트워크 매핑 경로를 사용하여 액세스 할 수 있습니다.

또는 MySQL 클라이언트 소프트웨어가 원격 호스트에 설치된 경우 mysql -e "SELECT ..."> file_name 는 해당 호스트에서 파일을 생성합니다.

SELECT ... INTO OUTFILELOAD DATA를 보완합니다. 열 값은 CHARACTER SET 절에 지정된 문자 집합으로 변환되어 기록됩니다. 이러한 절이 없으면 binary 문자 집합을 사용하여 값이 덤프됩니다. 실제로 문자 집합 변환이 없습니다. 결과 집합에 여러 문자 집합의 열이 포함 된 경우 출력 데이터 파일도 마찬가지이며 파일을 올바르게 다시로드하지 못할 수 있습니다.

문의 export_options 부분에 대한 구문은 동일한 FIELDS 및 iv id = “70bcc09913으로 구성됩니다. LOAD DATA 문과 함께 사용되는 “>

절. 기본값 및 허용 가능한 값을 포함하여 FIELDSLINES 절에 대한 정보는 섹션 13.2.7, “LOAD DATA 문”을 참조하십시오. .

FIELDS ESCAPED BY는 특수 문자 작성 방법을 제어합니다. FIELDS ESCAPED BY 문자가 비어 있지 않으면 다음과 같은 경우에 사용됩니다. 출력에서 다음 문자 앞에 오는 접두사로서의 모호함을 피하기 위해 필요합니다.

  • FIELDS ESCAPED BY 문자

  • FIELDS ENCLOSED BY 문자

  • FIELDS TERMINATED BYLINES TERMINATED BY

  • ASCII NUL (0 값 바이트, 실제로 이스케이프 문자 다음에 쓰여지는 것은 ASCII 0이며, 0 값 바이트가 아닙니다)

FIELDS TERMINATED BY, ENCLOSED BY, ESCAPED BY , 또는 LINES TERMINATED BY 문자를 이스케이프해야 파일을 안정적으로 다시 읽을 수 있습니다. ASCII NUL는 일부 페이저에서 더 쉽게 볼 수 있도록 이스케이프 처리되었습니다.

결과 파일은 SQL 구문을 준수 할 필요가 없으므로 다른 것은 이스케이프 할 필요가 없습니다.

FIELDS ESCAPED BY 문자가 비어 있으면 문자가 이스케이프되지 않고 NULL가 , \N가 아닙니다. 특히 데이터의 필드 값에 방금 제공된 목록의 문자가 포함 된 경우 빈 이스케이프 문자를 지정하는 것은 좋지 않을 수 있습니다.

INTO OUTFILE는 테이블의 모든 열을 테이블에 덤프하려는 경우 TABLE 문과 함께 사용할 수도 있습니다. 텍스트 파일. 이 경우 ORDER BYLIMIT를 사용하여 순서와 행 수를 제어 할 수 있습니다. 이 절은 INTO OUTFILE 앞에 와야합니다. TABLE ... INTO OUTFILESELECT ... INTO OUTFILE와 동일한 export_options를 지원하며 동일한 제한이 적용됩니다. 파일 시스템에 쓸 때. 이러한 명령문의 예는 다음과 같습니다.

VALUES 명령문과 함께 SELECT ... INTO OUTFILE를 사용하여 작성할 수도 있습니다. 값을 파일로 직접 가져옵니다. 예는 다음과 같습니다.

테이블 별칭을 사용해야합니다. 열 별칭도 지원되며 원하는 열에서만 값을 쓰는 데 선택적으로 사용할 수 있습니다. 또한 SELECT ... INTO OUTFILE에서 지원하는 내보내기 옵션 중 일부 또는 전부를 사용하여 출력 형식을 파일로 지정할 수 있습니다.

다음은 여러 프로그램에서 사용하는 CSV (쉼표로 구분 된 값) 형식으로 파일을 생성하는 예입니다.

INTO DUMPFILEINTO OUTFILE 대신 div> MySQL은 열이나 줄 종료없이 이스케이프 처리를 수행하지 않고 파일에 하나의 행만 기록합니다. 이것은 BLOB 값을 선택하고 파일에 저장하는 데 유용합니다.

참고

INTO OUTFILE 또는 는 mysqld 계정이 실행되는 운영 체제 사용자가 소유합니다. (이와 다른 이유로 mysqld를 root로 실행해서는 안됩니다.) MySQL 8.0.17에서 파일 생성을위한 umask는 0640입니다. 파일 내용을 조작하려면 충분한 액세스 권한이 있어야합니다. MySQL 8.0.17 이전에는 umask가 0666이고 파일은 서버 호스트의 모든 사용자가 쓸 수 있습니다.

secure_file_priv 시스템 변수가 비어 있지 않은 디렉토리 이름으로 설정된 경우 기록 할 파일은 해당 디렉토리에 있어야합니다.

이벤트 스케줄러가 실행하는 이벤트의 일부로 발생하는 SELECT ... INTO 문의 컨텍스트에서 진단 메시지 (오류뿐만 아니라 경고도 포함)가 오류 로그에 기록됩니다. , Windows의 경우 응용 프로그램 이벤트 로그. 자세한 내용은 섹션 25.4.5, “이벤트 스케줄러 상태”를 참조하십시오.

MySQL 8.0.22부터 SELECT INTO OUTFILESELECT INTO DUMPFILE (해당 버전에 도입 된 select_into_disk_sync 서버 시스템 변수를 설정하여 활성화 됨). 출력 버퍼 크기 및 선택적 지연은 각각 select_into_buffer_sizeselect_into_disk_sync_delay를 사용하여 설정합니다. 자세한 내용은 이러한 시스템 변수에 대한 설명을 참조하세요.

Write a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다