CSV(Comma Separated Values) 파일은 값들이 쉼표로 구분되어 있는 일종의 텍스트 파일입니다. 즉, 쉼표로 구분된 값을 담고 있는 텍스트 파일이라고 할 수 있습니다. CSV 파일의 데이터를 MySQL 테이블로 가져올 때는 LOAD DATA INFILE 문과 함께 FIELDS TERMINATED BY 옵션을 사용해야 합니다. 이 옵션은 필드(값)가 어떤 문자로 구분되어 있는지 MySQL에 알려주는 역할을 합니다.
아래 예제를 통해 실제 과정을 살펴보겠습니다.
1. CSV 파일 준비하기
다음과 같이 쉼표로 구분된 값이 저장된 A.CSV 파일이 있다고 가정해 보겠습니다.
105,Chum,USA,11000 106,Danny,AUS,12000
각 행은 직원의 ID, 이름, 국가, 급여 순서로 구성되어 있습니다.
2. 데이터를 담을 테이블 생성하기
먼저 CSV 데이터를 저장할 테이블을 생성합니다.
mysql> CREATE TABLE employee1_tbl(Id INT, Name VARCHAR(20), Country VARCHAR(20), Salary INT); Query OK, 0 rows affected (0.91 sec)
3. LOAD DATA INFILE로 데이터 가져오기
이제 다음 명령문을 사용하여 CSV 파일의 데이터를 테이블로 가져올 수 있습니다.
mysql> LOAD DATA LOCAL INFILE 'd:\A.csv' INTO TABLE employee1_tbl FIELDS TERMINATED BY ','; Query OK, 2 rows affected (0.16 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
여기서 FIELDS TERMINATED BY ',' 부분이 핵심입니다. 이 옵션이 없으면 MySQL은 각 행 전체를 하나의 값으로 인식하여 데이터가 올바르게 분리되지 않습니다.
4. 결과 확인하기
데이터가 정상적으로 입력되었는지 SELECT 문으로 확인해 보겠습니다.
mysql> SELECT * FROM employee1_tbl; +------+-------+---------+--------+ | Id | Name | Country | Salary | +------+-------+---------+--------+ | 105 | Chum | USA | 11000 | | 106 | Danny | AUS | 12000 | +------+-------+---------+--------+ 2 rows in set (0.00 sec)
위 결과 집합을 보면 A.CSV 파일의 데이터가 employee1_tbl 테이블로 성공적으로 옮겨진 것을 확인할 수 있습니다.
참고 사항
LOAD DATA LOCAL INFILE을 사용하려면 서버와 클라이언트 양쪽에서 local_infile 기능이 활성화되어 있어야 합니다. 만약 에러가 발생한다면 SET GLOBAL local_infile = 1;로 활성화하거나, 접속 시 해당 옵션을 허용해 주어야 합니다. 또한 파일 경로는 MySQL 서버가 접근할 수 있는 위치를 지정해야 하며, Windows 환경에서는 백슬래시(\) 대신 슬래시(/)를 사용하는 것이 안전합니다.