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
이후의 INTO
는 SELECT
의 끝이 아닌 경고.
iv id = “0db2581f17″과 같은 iv id = “0db2581f17″때문에 INTO
절은 중첩 된 SELECT
에서 사용해서는 안됩니다. >
는 결과를 외부 컨텍스트에 반환해야합니다. UNION
문 내에서 INTO
사용에도 제약이 있습니다. 섹션 13.2.10.3, “UNION 절”을 참조하십시오.
INTO
변형의 경우 : var_list
-
var_list
는 각각 사용자 정의 변수, 저장 프로 시저 또는 함수 매개 변수가 될 수있는 하나 이상의 변수 목록을 지정합니다. , 또는 저장된 프로그램 로컬 변수 (준비된SELECT ... INTO
문 내에서 사용자 정의 변수 만 허용됩니다. 섹션 13.6.4.2, “로컬 변수 범위 및 해상도”참조) .)var_list
-
선택한 값이 변수에 할당됩니다. 변수 수는 열 수와 일치해야합니다. 쿼리는 단일 행을 반환해야합니다. 쿼리가 행을 반환하지 않으면 오류 코드 1329 (
No data
)와 함께 경고가 발생하고 변수 값은 변경되지 않은 상태로 유지됩니다. 쿼리가 여러 행을 반환하면 오류 1172가 발생합니다 (Result consisted of more than one row
). 문이 여러 행을 검색 할 수있는 경우LIMIT 1
를 사용하여 결과 집합을 단일 행으로 제한 할 수 있습니다.
INTO
는 다음 제한에 따라 var_list
TABLE
문과 함께 사용됩니다.
-
변수는 테이블의 열 수와 일치해야합니다.
-
테이블에 행이 두 개 이상 포함 된 경우
LIMIT 1
를 사용하여 결과 집합을 단일 행으로 제한해야합니다.LIMIT 1
는INTO
키워드 앞에 와야합니다.
예 이러한 문의 내용은 다음과 같습니다.
또한 다음을 생성하는 VALUES
문에서 값을 선택할 수 있습니다. 단일 행을 사용자 변수 세트에 추가합니다. 이 경우 테이블 별칭을 사용해야하며 값 목록의 각 값을 변수에 할당해야합니다. 여기에 표시된 두 문은 각각 SET @x=2, @y=4, @z=8
와 동일합니다.
사용자 변수 이름은 대소 문자를 구분하지 않습니다. . 섹션 9.4, “사용자 정의 변수”를 참조하십시오.
SELECT
의 SELECT ... 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 OUTFILE
는 LOAD DATA
를 보완합니다. 열 값은 CHARACTER SET
절에 지정된 문자 집합으로 변환되어 기록됩니다. 이러한 절이 없으면 binary
문자 집합을 사용하여 값이 덤프됩니다. 실제로 문자 집합 변환이 없습니다. 결과 집합에 여러 문자 집합의 열이 포함 된 경우 출력 데이터 파일도 마찬가지이며 파일을 올바르게 다시로드하지 못할 수 있습니다.
문의 export_options
부분에 대한 구문은 동일한 FIELDS
및 iv id = “70bcc09913으로 구성됩니다. LOAD DATA
문과 함께 사용되는 “>
절. 기본값 및 허용 가능한 값을 포함하여 FIELDS
및 LINES
절에 대한 정보는 섹션 13.2.7, “LOAD DATA 문”을 참조하십시오. .
FIELDS ESCAPED BY
는 특수 문자 작성 방법을 제어합니다. FIELDS ESCAPED BY
문자가 비어 있지 않으면 다음과 같은 경우에 사용됩니다. 출력에서 다음 문자 앞에 오는 접두사로서의 모호함을 피하기 위해 필요합니다.
-
FIELDS ESCAPED BY
문자 -
FIELDS ENCLOSED BY
문자 -
FIELDS TERMINATED BY
및LINES TERMINATED BY
값 -
ASCII
NUL
(0 값 바이트, 실제로 이스케이프 문자 다음에 쓰여지는 것은 ASCII0
이며, 0 값 바이트가 아닙니다)
FIELDS TERMINATED BY
, ENCLOSED BY
, ESCAPED BY
, 또는 LINES TERMINATED BY
문자를 이스케이프해야 파일을 안정적으로 다시 읽을 수 있습니다. ASCII NUL
는 일부 페이저에서 더 쉽게 볼 수 있도록 이스케이프 처리되었습니다.
결과 파일은 SQL 구문을 준수 할 필요가 없으므로 다른 것은 이스케이프 할 필요가 없습니다.
FIELDS ESCAPED BY
문자가 비어 있으면 문자가 이스케이프되지 않고 NULL
가 , \N
가 아닙니다. 특히 데이터의 필드 값에 방금 제공된 목록의 문자가 포함 된 경우 빈 이스케이프 문자를 지정하는 것은 좋지 않을 수 있습니다.
INTO OUTFILE
는 테이블의 모든 열을 테이블에 덤프하려는 경우 TABLE
문과 함께 사용할 수도 있습니다. 텍스트 파일. 이 경우 ORDER BY
및 LIMIT
를 사용하여 순서와 행 수를 제어 할 수 있습니다. 이 절은 INTO OUTFILE
앞에 와야합니다. TABLE ... INTO OUTFILE
는 SELECT ... INTO OUTFILE
와 동일한 export_options
를 지원하며 동일한 제한이 적용됩니다. 파일 시스템에 쓸 때. 이러한 명령문의 예는 다음과 같습니다.
VALUES
명령문과 함께 SELECT ... INTO OUTFILE
를 사용하여 작성할 수도 있습니다. 값을 파일로 직접 가져옵니다. 예는 다음과 같습니다.
테이블 별칭을 사용해야합니다. 열 별칭도 지원되며 원하는 열에서만 값을 쓰는 데 선택적으로 사용할 수 있습니다. 또한 SELECT ... INTO OUTFILE
에서 지원하는 내보내기 옵션 중 일부 또는 전부를 사용하여 출력 형식을 파일로 지정할 수 있습니다.
다음은 여러 프로그램에서 사용하는 CSV (쉼표로 구분 된 값) 형식으로 파일을 생성하는 예입니다.
INTO DUMPFILE
를 사용하는 경우 INTO 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 OUTFILE
및 SELECT INTO DUMPFILE
(해당 버전에 도입 된 select_into_disk_sync
서버 시스템 변수를 설정하여 활성화 됨). 출력 버퍼 크기 및 선택적 지연은 각각 select_into_buffer_size
및 select_into_disk_sync_delay
를 사용하여 설정합니다. 자세한 내용은 이러한 시스템 변수에 대한 설명을 참조하세요.