MySQL에 CSV 파일을 넣을 때 가장 많이 막히는 포인트는 SQL 문법보다 순서다. 보통은 LOAD DATA LOCAL INFILE 문장만 외우고 바로 실행하려다가 No database selected, table doesn't exist, local_infile disabled 같은 오류를 먼저 만나게 된다. 실제로는 DB 선택 → 테이블 생성 확인 → local infile 확인 → CSV 적재 → 결과 검증 순서로 가야 훨씬 덜 꼬인다.
특히 처음 CSV를 넣을 때는 “CSV만 있으면 바로 들어가겠지”라고 생각하기 쉬운데, MySQL은 먼저 어느 DB에 넣을지, 어느 테이블에 넣을지, 로컬 파일 읽기를 허용하는지가 정리돼 있어야 한다. 이 글에서는 MySQL 기준으로 CSV 파일을 불러오는 전체 흐름과, LOAD DATA LOCAL INFILE 사용법, 그리고 자주 나는 오류를 한 번에 정리한다.
MySQL에서 CSV를 넣는 전체 흐름
CSV 적재는 보통 아래 순서로 진행하면 된다.
- MySQL에 local infile 옵션으로 접속한다.
- 데이터를 넣을 DB를 만든다.
- USE로 현재 DB를 선택한다.
- SQL 파일이 있으면 먼저 실행해서 테이블 구조를 만든다.
- SHOW TABLES, DESC로 테이블 존재 여부와 컬럼 구조를 확인한다.
- LOAD DATA LOCAL INFILE로 CSV를 넣는다.
- SELECT ... LIMIT로 실제 적재 결과를 확인한다.
즉 핵심은 CSV를 넣기 전에 테이블 구조부터 준비하는 것이다.
1. MySQL 접속: local infile 옵션부터 확인
CSV 파일을 로컬 경로에서 읽으려면, 접속할 때 --local-infile=1 옵션이 필요한 경우가 있다. 그래서 처음부터 아래처럼 접속하는 게 안전하다.
/usr/local/mysql/bin/mysql --local-infile=1 -u username -p
여기서 중요한 건 --local-infile=1이다.
이 옵션이 빠져 있으면 LOAD DATA LOCAL INFILE을 실행할 때 로컬 파일 읽기 자체가 막히는 경우가 있다.
접속 후에는 아래 명령으로 현재 local_infile 상태도 확인할 수 있다.
SHOW VARIABLES LIKE 'local_infile';
결과가 ON으로 나오면 로컬 파일 읽기 설정이 켜진 상태고, OFF면 적재 전에 이 설정부터 다시 봐야 한다.
2. DB를 만들고 반드시 선택해야 한다
CSV를 넣기 전에 가장 먼저 해야 할 일은 데이터를 넣을 데이터베이스를 선택하는 것이다.
이 단계를 빠뜨리면 가장 흔하게 나오는 오류가 바로 No database selected다.
기본 흐름은 아래처럼 잡으면 된다.
CREATE DATABASE dbname;
USE dbname;
SELECT DATABASE();
여기서 SELECT DATABASE();는 지금 내가 어떤 DB를 보고 있는지 확인하는 용도다.
생각보다 이걸 안 찍고 진행하다가, 엉뚱한 DB에 넣거나 아예 DB를 선택하지 않은 상태에서 작업하는 경우가 많다.
즉 USE dbname;은 그냥 습관처럼 넣는 게 좋다.
3. SQL 파일이 있으면 CSV보다 먼저 실행한다
CSV를 적재하려면 먼저 테이블이 있어야 한다.
그래서 .sql 파일이 함께 있다면, 보통은 CSV보다 먼저 SQL 파일을 실행해서 테이블 구조를 만들어야 한다.
SOURCE /Users/yourname/Desktop/file.sql;
이 명령은 지정한 SQL 파일 안의 쿼리를 그대로 실행한다.
보통 여기에는 CREATE TABLE 문이 들어 있어서, 이후 CSV를 넣을 대상 테이블이 생성된다.
즉 CSV가 안 들어갈 때는 무조건 LOAD DATA 문부터 보지 말고,
테이블이 먼저 만들어졌는지부터 확인하는 게 맞다.
4. 테이블 존재 여부와 구조를 먼저 확인한다
SQL 파일을 실행했거나, 이미 DB 안에 테이블이 있다고 생각해도 바로 CSV를 넣기보다 먼저 확인하는 게 좋다.
SHOW TABLES;
이 명령으로 현재 DB에 어떤 테이블이 있는지 볼 수 있다.
그리고 대상 테이블 구조는 아래처럼 확인한다.
DESC tablename;
여기서 보는 포인트는 단순히 컬럼 개수만이 아니다.
- 컬럼 순서가 CSV와 맞는지
- 자료형이 맞는지
- NOT NULL 제약이 있는지
- 헤더를 제외해야 하는 구조인지
즉 CSV 적재 전에 DESC 한 번 보는 것만으로도 오류를 많이 줄일 수 있다.
5. CSV 파일 적재: LOAD DATA LOCAL INFILE 기본 형태
이제 실제로 CSV를 넣는 핵심 구문이다.
LOAD DATA LOCAL INFILE '/경로/filename.csv'
INTO TABLE tablename
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\\n'
IGNORE 1 ROWS;
이 문장에서 가장 중요한 부분만 보면 이렇다.
- FIELDS TERMINATED BY ',' → 컬럼 구분자가 쉼표라는 뜻
- ENCLOSED BY '"' → 문자열이 큰따옴표로 감싸져 있을 수 있다는 뜻
- LINES TERMINATED BY '\\n' → 줄바꿈 단위로 행을 구분
- IGNORE 1 ROWS → 첫 줄 헤더를 건너뜀
CSV에 헤더가 있다면 IGNORE 1 ROWS를 거의 항상 같이 쓰게 된다.
이걸 빼먹으면 헤더 문자열이 첫 번째 데이터로 들어가면서 자료형 오류가 나거나, 데이터가 어긋날 수 있다.
6. 적재 결과는 바로 확인해야 한다
CSV가 들어갔다고 끝이 아니다.
실제 데이터가 제대로 들어갔는지는 반드시 확인해야 한다.
SELECT *
FROM tablename
LIMIT 10;
이렇게 상위 10개 정도만 확인해도 대충 감이 온다.
- 컬럼이 한 칸씩 밀리지 않았는지
- 헤더가 첫 줄로 들어가지 않았는지
- 한글이 깨지지 않았는지
- 숫자/문자 컬럼이 예상대로 들어갔는지
즉 LOAD DATA 다음엔 거의 반사적으로 SELECT ... LIMIT 10을 같이 한다고 생각하면 된다.
자주 나는 오류와 해결 방법
CSV 적재는 문법보다 환경/순서 문제로 더 많이 막힌다.
아래 오류는 거의 자주 나오는 편이다.
1) No database selected
이건 현재 사용할 DB를 선택하지 않았다는 뜻이다.
해결은 단순하다.
USE dbname;
그리고 필요하면 아래로 다시 확인한다.
SELECT DATABASE();
2) 테이블이 없다는 오류
이건 CSV보다 먼저 테이블이 준비되지 않았다는 뜻이다.
즉 SQL 파일 실행이나 CREATE TABLE이 먼저 필요하다.
확인은 이렇게 한다.
SHOW TABLES;
DESC tablename;
테이블이 없다면 CSV 구문을 계속 고칠 게 아니라,
먼저 .sql 파일을 SOURCE로 실행해야 한다.
3) local infile 관련 오류
이건 보통 로컬 파일 읽기 허용 설정이 꺼져 있을 때 난다.
확인은 아래처럼 한다.
SHOW VARIABLES LIKE 'local_infile';
그리고 접속할 때는 아예 처음부터 이렇게 들어가는 게 좋다.
/usr/local/mysql/bin/mysql --local-infile=1 -u username -p
4) 헤더가 데이터로 들어가는 문제
CSV 첫 줄이 컬럼명인데 IGNORE 1 ROWS를 빼먹으면 생긴다.
이건 적재 후 SELECT * LIMIT 10만 해봐도 바로 보인다.
5) 컬럼 수가 안 맞는 문제
CSV 컬럼 개수와 테이블 구조가 다르면 데이터가 밀리거나 오류가 난다.
이럴 땐 DESC tablename;으로 테이블 컬럼 순서를 먼저 보고, CSV 구조와 맞는지 확인해야 한다.
CSV 적재 전에 체크하면 좋은 것
실전에서는 아래 세 가지만 먼저 보면 대부분 덜 막힌다.
현재 DB 선택 여부
SELECT DATABASE();
테이블 존재 여부
SHOW TABLES;
local infile 상태
SHOW VARIABLES LIKE 'local_infile';
즉 CSV 적재는 LOAD DATA LOCAL INFILE 문장만 아는 걸로 끝나는 작업이 아니라,
어디에 넣는지 / 넣을 테이블이 있는지 / 로컬 파일 읽기가 가능한지를 먼저 확인하는 작업이다.
정리
MySQL에서 CSV 파일을 넣을 때 가장 중요한 건 문법보다 작업 순서다.
먼저 local infile 옵션으로 접속하고, DB를 선택하고, 테이블이 있는지 확인한 뒤, LOAD DATA LOCAL INFILE로 적재하고, 마지막으로 결과를 검증해야 한다.
실무에서는 대부분 CSV 적재가 안 되는 이유가 쿼리 문법이 아니라
- DB를 선택하지 않았거나
- 테이블이 없거나
- local_infile이 꺼져 있거나
- 헤더를 무시하지 않았기 때문인 경우가 많다.
즉 CSV 적재 작업은 LOAD DATA 한 줄보다, 그 전에 무엇을 확인해야 하는지를 같이 알아야 제대로 끝난다.
MySQL에서 CSV를 넣을 때는 LOAD DATA LOCAL INFILE 문장 자체보다 DB 선택 → 테이블 확인 → local infile 확인 → 적재 결과 검증 순서를 먼저 지키는 게 중요하다.
'Data Analytics > SQL' 카테고리의 다른 글
| SQL에서 NULL과 빈 문자열 차이 | age_certification 필터링 실수 방지 (0) | 2026.05.28 |
|---|---|
| SQL CASE WHEN + LIKE 정리 | 리뷰 데이터에서 키워드 언급 수 세기 (0) | 2026.05.26 |
| SQL 서브쿼리 주의점 | 최고값 비교할 때 조건 범위를 맞춰야 하는 이유 (0) | 2026.05.26 |
| SQL JOIN으로 N:M 관계 풀기 | 학생-동아리 연결 테이블 예제 (0) | 2026.05.20 |
| SQL INNER JOIN과 LEFT JOIN 차이 | 기준 테이블에 따라 결과가 달라지는 이유 (0) | 2026.05.20 |
