MySQL을 통해 데이터베이스를 배울 때 테이블에 데이터를 입력하는 것이 문제가 된다.

테이블에 입력된 데이터가 없으면 할 수 있는 것이 없다.


데이터도 한 두개의 레코드를 입력해서는 의미가 없다.

또한 테이블도 최소한 두 개 이상은 되어야 한다.


먼저 외부 파일에서 데이터를 읽어 테이블에 적재하는 방법을 알아보자.


1. 데이터 파일 만들기

테이블의 레코드 하나를 한 줄에 써야 한다.

각 필드는 하나의 TAB으로 구분된다.

아래와 같은 s2013_52.txt 텍스트 파일을 만들었다.

9801 Hong kildong Seoul 80 100 9802 Kim chulsu Daejeon 90 200 9803 Lee sunja KangLeung 90 100 9805 Hong kilding Busan 95 200 9806 Park namjung Seoul 65 300

이름 사이는 스페이스 키 입력이다.


2. MySQL에서 테이블을 만든다.

mysql> CREATE TABLE student -> (sno int NOT NULL, -> sname char(20), -> address char(10), -> score int, -> dept int, -> PRIMARY KEY (sno) -> );


mysql> describe student; <----------------- 결과 확인 +---------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+----------+------+-----+---------+-------+ | sno | int(11) | NO | PRI | NULL | | | sname | char(20) | YES | | NULL | | | address | char(10) | YES | | NULL | | | score | int(11) | YES | | NULL | | | dept | int(11) | YES | | NULL | | +---------+----------+------+-----+---------+-------+ 5 rows in set (0.09 sec)


테이블 내용을 확인하면 비어 있는 것을 알 수 있다.

mysql> select * from student; Empty set (0.00 sec)


3. 테이블에 데이터 적재하는 MySQL 명령어

  • LOAD DATA INFILE 구문

 요약 명령

  LOAD DATA  INFILE 'file_name'

    INTO TABLE tbl_name

 상세 명령 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'

    [REPLACE | IGNORE]

    INTO TABLE tbl_name

    [CHARACTER SET charset_name]

    [{FIELDS | COLUMNS}

        [TERMINATED BY 'string']

        [[OPTIONALLY] ENCLOSED BY 'char']

        [ESCAPED BY 'char']

    ]

    [LINES

        [STARTING BY 'string']

        [TERMINATED BY 'string']

    ]

    [IGNORE number LINES]

    [(col_name_or_user_var,...)]

    [SET col_name = expr,...]


file_name: 데이터를 가진 파일은 전체 경로를  써주어야 한다.

MySQL 버전에 따라 LOCAL이 지원여부가 다르므로 확인해야 한다.

윈도에서 만든 텍스트 파일은 \r\n 종결자를 사용하므로 명령어에 [LINES TERMINATED BY '\r\n']를 추가해야 한다. 


테이블 내용을 다시 확인하면 테스트 파일 내용이 정상적으로 읽혀진 것이 보인다.

mysql> LOAD DATA INFILE '/home/hyunmu/DB/sampdb/jdep.txt' INTO TABLE student; Query OK, 5 rows affected (0.04 sec) Records: 5 Deleted: 0 Skipped: 0 Warnings: 0


mysql> select * from student; +------+--------------+-----------+-------+------+ | sno | sname | address | score | dept | +------+--------------+-----------+-------+------+ | 9801 | Hong kildong | Seoul | 80 | 100 | | 9802 | Kim chulsu | Daejeon | 90 | 200 | | 9803 | Lee sunja | KangLeung | 90 | 100 | | 9805 | Hong kilding | Busan | 95 | 200 | | 9806 | Park namjung | Seoul | 65 | 300 | +------+--------------+-----------+-------+------+ 5 rows in set (0.00 sec)


+ Recent posts

티스토리 툴바