강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

MySQL강좌20편: 텍스트파일의 데이터를 MYSQL의 특정데이터베이스로 입력하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

MySQL강좌20: 텍스트파일의 데이터를 MYSQL의 특정데이터베이스로 입력하기

 

1. 텍스트파일 데이터 입력 개론

 

MYSQL mysqlimport유틸리티를 이용하면 리눅스 쉘상태에서 한번의 명령으로 특정 텍스트파일의 전체내용을 MYSQL의 특정데이터베이스의 특정테이블에 입력을 할 수가 있다.  이 방법은 텍스트파일에 저장되어있는 크기가 작은 전체데이터들을 특정데이터베이스에 편리하게 입력하기위한 방법으로 주로 사용되고 있다.

 

이 책을 보고 있는 분들 가운데는 이미 이 방법을 잘 알고있는 분들도 있으리라 생각한다. 리눅스 서버관리자들이나 프로그램 개발하는 분들도 이 방법을 알아두면 텍스트파일에 데이터베이스의 데이터가 저장되어있는 경우에 간편하게 DB화시킬 수 있는 굉장히 유용한 방법이 될 수 있다는 점이 mysqlimport를 이용하는 가장 주된 이유이다.

 

아래는 mysqlimport를 사용하는 형식이다.

 

사용형식   : mysqlimport -u  MYSQL사용자 -p  데이터베이스명  텍스트파일명

 

위의 형식에서 데이터베이스명은 텍스트파일의 데이터가 입력될 데이터베이스이다. 그리고 텍스트파일명은 데이터베이스에 저장될 데이터가 저장되어있는 텍스트파일이다.

 

위의 형식과 같이 실행하면 텍스트파일명에 저장되어있는 데이터가 데이터베이스명의 특정 테이블의 데이터로 입력된다. 

 

그런데 위의 형식에서 한가지 이상한 점이 있을 것이다. 즉 텍스트파일의 데이터가 입력될 데이터베이스명은 지정되어있는데 실제로 저장될 테이블명이 지정되어있지 않다는 점이다. 물론 위의 형식자체로만 본다면 전혀 이상하게 보일 수 있다.

 

위의 형식에서 데이터가 저장될 테이블이름은 텍스트파일명과 동일한 테이블이 된다. mysqlimport를 이용하여 텍스트파일의 데이터를 특정데이터베이스의 테이블에 저장할 때에는 텍스트파일명테이블명이 동일해야한다. 결론적으로 위의 형식에서 텍스트파일명  테이블명과 동일한 이름이어야 한다는 점이다.

 

그리고 저장될 테이블은 이미 생성되어있어야 한다.

 

이점만 유념하면 mysqlimport를 이용하여 텍스트파일의 전체내용을 특정데이터베이스의  테이블에 입력하는 것은 별 어려움이 없을 것이다.

 

 

2. 특정 텍스트파일 전체내용을 MYSQL에 입력하기

 

, 이제 앞에서 설명한 mysqlimport를 이용하여 특정 텍스트파일의 내용을 특정데이터베이스의  테이블로 입력해보도록 하겠다.  MYSQL mysqlimport유틸리티를 이용하여 지정된 텍스트파일의 전체 내용을 특정데이터베이스의 특정테이블로 저장하는 실제예를 설명 하겠다.  앞의 설명에서 말씀드린바와같이 mysqlimport유틸리티를 사용하는 형식은 다음과 같다.

 

사용형식 : mysqlimport [옵션] 데이터베이스명 텍스트파일명

 

위와 형식대로 mysqlimport를 이용하여 지정된 텍스트파일의 내용을 특정데이터베이스의 특정테이블로 저장하려면 먼저 대상 텍스트파일이 있어야만 한다.

 

아래는 이번 예를 설명하기 위하여 직접 만든 간단한 텍스트파일이다. 텍스트파일의 이름은 addressbook이다. 이 텍스트파일의 내용을 cat명령어로 확인한 것이다.

 

[root@sulinux bin]#pwd

/usr/local/mysql/bin

[root@sulinux bin]#

[root@sulinux bin]#cat addressbook

PARKSUNGSOO        011-111-2222    SEOUL   A+

JUNGWOOYOUNG       011-222-3333    SEOUL   B+

LEEJAESUK          016-222-1111    BUSAN   C+

SONTAESOO          019-333-4444    BUSAN   D+

[root@sulinux bin]#

 

텍스트파일을 생성할 때에는 가능한 TAB키를 이용하여 각 필드사이를 띄워야한다. 물론 TAB키를 이용하지않고 띄워도 입력은 되지만 아무런 에러없이 정확한 입력을 하려면 TAB키를 이용하여 각 필드데이터 사이를 띄우는 것이 좋다.

 

그리고 다음은 addressbook이라는 텍스트파일의 내용을 temp_db2라는 데이터베이스의 addressbook이라는 테이블로 입력하기 위하여 mysqlimport를 사용한 것이다.

 

[root@sulinux bin]# pwd

/usr/local/mysql/bin

[root@sulinux bin]#

[root@sulinux bin]# ./mysqlimport -u root -p temp_db2 addressbook

Enter password: ********

temp_db2.addressbook: Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

[root@sulinux bin]#

 

위의 예에서 주의할 것은 “./mysqlimport -u root -p temp_db2 addressbook”에서 지정된 텍스트파일의 이름이 addressbook이라는 것이며 이 텍스트파일의 이름 addressbook이 저장될 테이블이름과 동일해야 한다는 점이다.

 

즉 위의 mysqlimport명령문에서 실제 저장될 테이블명이 지정되지 않았지만 테이블명은 자동적으로 텍스트파일의 이름과 동일한 것으로 인식하게 된다.  따라서 앞서 언급해 드린바와같이 텍스트파일의 이름을 정할 때에는 반드시 저장될 테이블의 이름과 동일한 파일명으로 하기 바란다.

 

그리고 위의 mysqlimport명령문의 사용결과를 보면 “temp_db2.addressbook: Records: 4  Deleted: 0  Skipped: 0  Warnings: 0” 과 같다. 이는 temp_db2라는 데이터베이스의 addressbook이라는 테이블에 4개의 Record가 저장 되었으며 입력되지 않은 데이터없이 모두 정상적으로 입력되었다는 것을 알 수 있다.

 

그리고 다음은 위와같이 mysqlimport를 이용하여 addressbook텍스트파일의 전체 내용을 temp_db2데이터베이스의 addressbook테이블에 저장하였으므로 실제로 입력이 되어있는가를 확인하기위하여 MYSQL로 접속하여 확인한 것이다.

 

[root@sulinux bin]# pwd

/usr/local/mysql/bin

[root@sulinux bin]#

[root@sulinux bin]# ./mysql -u root -p temp_db2

Enter password: ********

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.1.32 Source distribution

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> select * from addressbook;

+--------------+--------------+---------+-------+

| name         | tel          | address | grade |

+--------------+--------------+---------+-------+

| PARKSUNGSOO  | 011-111-2222 | SEOUL   | A+    |

| JUNGWOOYOUNG | 011-222-3333 | SEOUL   | B+    |

| LEEJAESUK    | 016-222-1111 | BUSAN   | C+    |

| SONTAESOO    | 019-333-4444 | BUSAN   | D+    |

+--------------+--------------+---------+-------+

4 rows in set (0.01 sec)

 

mysql>
mysql> exit

Bye

[root@sulinux bin]#

 

위의 예를보면 temp_db2라는 데이터베이스로 접속하여 “select * from addressbook”이라는 SQL문을 이용하여 입력된 4개의 레코드값들을 확인한 것이다. 텍스트파일의 내용과 동일한 데이터들이 모두 정상적으로 저장되어있다는 것을 확인할 수 있다.

 

아래 내용은 참고사항이다. 필요한 분들만 읽어보기 바란다.

 

앞의 설명에서 텍스트파일이 저장될 테이블이 mysqlimport를 사용하기 전에 미리 생성되어 있어야한다고 말하였다. 따라서  이번예를 직접 실습할 분들을 위하여 addressbook이라는 테이블을 생성하는 실제 예를 보여주도록 하겠다.  아래의 예는 필자가 이번예를 위하여 addressbook이라는 테이블을 직접 생성한 실제예이다.

 

[root@sulinux bin]#./mysql -u root -p temp_db2

Enter password: ********

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.1.32 Source distribution

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql>

mysql> create table addressbook (

    -> name varchar(16) NOT NULL,

    -> tel varchar(14) NOT NULL,

    -> address varchar(120) NOT NULL,

    -> grade varchar(10) NOT NULL,

    -> primary key (tel)

    -> );

Query OK, 0 rows affected (0.03 sec)

 

mysql>

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

mysql> exit

Bye

[root@sulinux bin]#

 

위의 예를보면 알겠지만 특정테이블을 생성할 때에는 “create table”이라는 SQL문을 이용한다.

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,514 개
  • 현재 접속자 :  275 명