MySQL - 테이블을 CSV 파일로 내보내기

안녕하세요, 미래의 데이터 마법사 여러분! 오늘 우리는 MySQL의 세계로 여행을 떠나고, 우리의 귀중한 데이터를 CSV 파일로 내보내는 방법을 배울 것입니다. 초보자라고 걱정하지 마세요; 저는 마치 우리가 제 교실에서 옆에 앉아 있는 것처럼 단계별로 안내해 드릴 것입니다. 시작해 볼까요!

MySQL - Export Table into CSV File

CSV 파일이란?

내보내기 시작하기 전에 CSV 파일이 무엇인지 이해해 보겠습니다. CSV는 쉼표로 구분된 값(Comma-Separated Values)의 약자입니다. 이는 표 형식의 데이터를 저장하는 간단한 파일 형식입니다. 파일의 각 줄은 표의 행을 나타내며, 각 행의 값들은 쉼표로 구분됩니다.

예를 들어, CSV 파일은 다음과 같을 수 있습니다:

Name,Age,City
John,25,New York
Sarah,30,London
Mike,28,Tokyo

이 형식은 간단하고 스프레드시트 소프트웨어나 다른 데이터베이스 등 다양한 애플리케이션으로 쉽게 가져올 수 있어 널리 사용됩니다.

MySQL 테이블을 CSV 파일로 내보내기

이제 우리의 수업의 핵심으로 넘어가겠습니다: MySQL 테이블을 CSV 파일로 내보내는 방법입니다. 이를 위한 여러 가지 방법이 있으며, 하나씩 자세히 탐구해 보겠습니다.

방법 1: SELECT ... INTO OUTFILE 문 사용

이는 MySQL에서 데이터를 CSV 파일로 내보내는 가장 간단한 방법입니다. 기본 문법은 다음과 같습니다:

SELECT * FROM table_name
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

이를 구성해 보겠습니다:

  • SELECT * FROM table_name: 이는 테이블의 모든 열을 선택합니다.
  • INTO OUTFILE '/path/to/file.csv': 이는 출력 파일 경로를 지정합니다.
  • FIELDS TERMINATED BY ',': 이는 MySQL이 필드를 쉼표로 구분하도록 합니다.
  • ENCLOSED BY '"': 이는 필드를 이중 따옴표로 감싸는 것(데이터에 쉼표가 포함된 경우 유용합니다).
  • LINES TERMINATED BY '\n': 이는 각 행을 줄 바꿈 문자로 종료합니다.

방법 2: mysqldump 명령어 사용

명령줄에서 작업을 좋아하는 경우 mysqldump가 도움이 됩니다. 다음과 같이 사용합니다:

mysqldump -u username -p --tab=/path/to/output/directory database_name table_name

이 명령어는 지정된 디렉토리에 두 가지 파일을 생성합니다:

  1. .sql 파일: 테이블 구조를 포함
  2. .txt 파일: 탭으로 구분된 데이터 포함

CSV 형식을 얻으려면 다음과 같은 옵션을 추가할 수 있습니다:

mysqldump -u username -p --tab=/path/to/output/directory --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a database_name table_name

내보내진 .csv 파일의 저장 위치

파일을 내보내는 경우, 파일이 저장되는 위치를 이해하는 것이 중요합니다. 기본적으로 MySQL은 내보내진 파일을 자신의 데이터 디렉토리에 저장합니다. 그러나 보안 이유로 파일 시스템에 쓰기 권한이 없을 수 있습니다.

MySQL이 파일을 저장하려고 시도하는 위치를 확인하려면 다음을 실행할 수 있습니다:

SHOW VARIABLES LIKE "secure_file_priv";

이 명령어는 MySQL이 읽고 쓸 수 있는 디렉토리를 보여줍니다. NULL을 반환하면 제한이 없음을 의미합니다.

MySQL 데이터를 CSV 형식으로 내보내기

이제 몇 가지 특정 시나리오와 그에 대한 처리 방법을 살펴보겠습니다.

테이블 데이터와 열 제목을 함께 내보내기

열 이름을 포함하여 CSV 파일을 내보내고 싶다면 UNION 쿼리를 사용할 수 있습니다:

(SELECT 'id', 'name', 'age', 'city')
UNION
(SELECT * FROM users)
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

이는 먼저 열 이름을 추가한 후, 실제 데이터와 결합합니다.

열 이름을 지정하지 않고 테이블 데이터 내보내기

열 이름을 포함하지 않고 내보내고 싶다면 다음과 같이 사용합니다:

SELECT * FROM users
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

NULL 값을 대체하기

때로는 NULL 값을 다른 값으로 대체하고 싶을 수 있습니다. 이를 위해 IFNULL() 함수를 사용할 수 있습니다:

SELECT
id,
IFNULL(name, 'Unknown') AS name,
IFNULL(age, 0) AS age,
IFNULL(city, 'N/A') AS city
FROM users
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

이는 NULL 이름을 'Unknown', NULL 나이를 0, NULL 도시를 'N/A'로 대체합니다.

클라이언트 프로그램 사용

MySQL 워크벤치나 phpMyAdmin과 같은 MySQL 클라이언트 프로그램을 사용하는 경우, 내장된 내보내기 기능을 자주 사용할 수 있습니다. 이 GUI들은 특히 초보자에게 더 쉽게 사용됩니다.

예를 들어, MySQL 워크벤치에서:

  1. 테이블을 오른쪽 클릭합니다.
  2. "Table Data Export Wizard"를 선택합니다.
  3. 내보내기 데이터를 CSV로 설정하는 가이드를 따릅니다.

기억하세요, 연습이 완벽을 이루ります! 이 방법들을 실험해 두시오. 당신이 데이터 마법사가 되기 전까지의 여정을 기억하십시오. 연습을 하고, 호기심을 유지하십시오. 곧 데이터와의 춤을 추게 될 것입니다!

이하는 우리가 논의한 방법들의 요약 표입니다:

방법 장점 단점
SELECT ... INTO OUTFILE 빠르고 유연 파일 시스템 접근 필요
mysqldump 명령줄 친화적, 대규모 데이터 셋 처리 복잡한 문법
클라이언트 GUI 프로그램 사용자 친화적, 시각적 인터페이스 직접 SQL에 비해 제한적

미래의 데이터 마에스트로 여러분! 기억하십시오, 모든 위대한 데이터 과학자는 당신이 현재 있는 위치에서 시작했습니다. 연습을 하고, 호기심을 유지하십시오. 곧 데이터와의 춤을 춤추게 될 것입니다!

Credits: Image by storyset