Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

텍스트 파일을 MySQL 테이블로 가져올 때 파일을 수정하지 않고 열의 값을 변경해서 업로드하는 방법

개요

텍스트 파일에 작성된 값 그대로가 아니라 변경된 값을 MySQL 테이블에 업로드하고 싶다면 사용자 변수(user variable)SET 명령을 함께 사용하면 됩니다. 이 방법을 활용하면 원본 텍스트 파일은 그대로 둔 채, 데이터를 가져오는(임포트) 시점에 원하는 값으로 변환하여 저장할 수 있습니다.

예제

다음과 같은 데이터가 담긴 'A.txt' 파일이 있다고 가정해 보겠습니다.

105,Chum,USA,11000
106,Danny,AUS,12000

여기서 텍스트 파일의 급여(salary) 값은 수정하지 않으면서, 데이터를 가져오는 시점에 급여에 500을 더한 값으로 테이블에 저장하고 싶다면 아래 쿼리처럼 사용자 변수(@salary)와 SET 옵션을 함께 사용하면 됩니다.

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee11_tbl FIELDS TERMINATED BY ',' (id,name,country,@salary) SET salary = @salary + 500;
Query OK, 2 rows affected (0.21 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

mysql> Select * from employee11_tbl;
+------+----------------+----------+--------+
| Id   | Name           | Country  | Salary |
+------+----------------+----------+--------+
| 105  | Chum           | USA      |  11500 |
| 106  | Danny          | AUS      |  12500 |
+------+----------------+----------+--------+
2 rows in set (0.00 sec)

위 결과 집합에서 확인할 수 있듯이, MySQL은 텍스트 파일의 급여 값에 500을 더한 후 테이블에 데이터를 업로드했습니다. 즉, 원본 파일 'A.txt'에는 여전히 11000과 12000이 그대로 남아 있지만, 테이블에는 각각 11500과 12500이 저장된 것입니다.

동작 원리 정리

  • (id, name, country, @salary) : 앞의 세 열은 테이블 열에 직접 매핑되고, 네 번째 값은 사용자 변수 @salary에 임시로 저장됩니다.
  • SET salary = @salary + 500 : 변수에 담긴 값을 원하는 대로 가공한 뒤 실제 테이블 열(salary)에 삽입합니다.

이처럼 SET 절에서는 단순한 덧셈뿐 아니라 곱셈, 문자열 함수 등 다양한 연산을 적용할 수 있으므로, 원본 데이터를 손대지 않고도 임포트 과정에서 유연하게 값을 변환할 수 있습니다.