[Alex] 데이터 장인의 블로그

[MySQL] Linux 로컬 서버에서 데이터 입력 (feat. csv파일 import) 본문

SQL

[MySQL] Linux 로컬 서버에서 데이터 입력 (feat. csv파일 import)

Alex, Yoon 2021. 10. 13. 15:52

2021.10.12 - [SQL] - [MySQL] Linux 환경 세팅

 

이 글은 Ubuntu 서버에 설치한 MySQL DB에 데이터를 입력하는 방법을 정리한 내용입니다. 

아직 Server와 DB구성을 마치지 않은 분은 위에 포스팅을 미리 읽고 오시는 것을 추천드립니다. 

 

Ubuntu Server에서 MySQL DB에 csv 파일 업로드

MySQL DB에서 데이터를 입력하는 방법은 여러가지가 있습니다. 구선생(Google)에 단순히 검색만 하더라도 공부할 수 있는 자료들이 많습니다(ex. pymysql, DBeaver 사용 등). 저도 이러한 방법을 주로 사용하다가, 가끔 속도 이슈같은 문제들이 발생하게 되는 경우가 있어 이번에는 Local 서버에서 직접 데이터를 업로드(from. csv) 하는 방법을 정리해보았습니다. csv파일을 사용한 이유는 비교적 가장 빠른 방법이기 때문입니다. 

 

CREATE TABLE (DDI문) 

데이터를 INSERT 하기 전, 각 데이터에 맞는 DATA TABLE이 만들어져 있어야 합니다. 간단히 DDI 문을 정리해보았습니다. 

CREATE 문은 아래 내용만 기억해도 됩니다. 각 컬럼의 자료형 입력, PK 설정 > PK, FK에 대한 내용은 이제는 거의 중요해지지 않은 개념이긴 하나, 나중에 기회가 된다면 정리 포스팅하겠습니다.

CREATE TABLE `FS_STORE` (
	`STORE_ID`	varchar(20) , -- 컬럼명, 자료형 
	`ADDR`	varchar(40) ,
	`SIDO`	varchar(15) ,
	`GUN`	varchar(15) ,
	`DONG`	varchar(15) ,
	`STORE_TYPE`	varchar(5) ,
	`STORE_DIVI_CD`	varchar(5) ,
	`STORE_DIVI_NM`	varchar(20) ,
	`STORE_DIVI_NM1`	varchar(20) ,
	`REG_DT`	varchar(10) ,
	PRIMARY KEY (`STORE_ID`) -- Primary Key 설정
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

 

1. 테이블 구조와 CSV file 구조가 동일 할때

LOAD DATA INFILE '[파일 위치]'  
INTO TABLE '[입력할 TABLE]'  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS;

 

2. 테이블 구조와 CSV file 구조가 다르거나 포멧이 다른 경우 

LOAD DATA INFILE '[csv 파일 위치]'  
INTO TABLE '[입력할 TABLE]' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS 
(@id,@emp_name,@salary, @bonuns,@hire_date) -- csv 파일의 컬럼명들
SET 
id = @id, -- 각 table의 컬럼에 하나하나 대입
emp_name = @emp_name, 
salary = @salary, 
hire_date = STR_TO_DATE(@hire_date, '%m/%d/%Y');

3. DB Server내에 있는 파일이 아니고, 클라이언트에 있는 CSV file 을 업로드 하고자 하는 경우 

-- LOCAL 언급 추가 

LOAD DATA LOCAL INFILE '[csv 파일 위치]'  
INTO TABLE '[입력할 TABLE]' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS 
(@id,@emp_name,@salary, @bonuns,@hire_date) 
SET 
id = @id, 
emp_name = @emp_name, 
salary = @salary, 
hire_date = STR_TO_DATE(@hire_date, '%m/%d/%Y');

 

ex. 외부에서 local 서버로 파일 이동 후, FS_STORE라는 TABLE에 데이터 입력. (한글도 포함되어 있으므로 Character set UTF8로 입력)

LOAD DATA LOCAL INFILE '[csv 파일 위치]'  
INTO TABLE FS_STORE
CHARACTER SET utf8
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS 
(@STORE_NO, @ADDR, @SIDO, @GUN, @DONG, @STORE_TYPE, @STORE_DIVI_CD, @STORE_DIVI_NM, @STORE_DIVI_NM1, @REG_DT) 
SET 
STORE_ID = @STORE_NO ,
ADDR = @ADDR ,
SIDO = @SIDO ,
GUN = @GUN ,
DONG = @DONG ,
STORE_TYPE = @STORE_TYPE ,
STORE_DIVI_CD = @STORE_DIVI_CD ,
STORE_DIVI_NM = @STORE_DIVI_NM ,
STORE_DIVI_NM1 = @STORE_DIVI_NM1 ,
REG_DT = @REG_DT ;

 

 

반응형
Comments