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 '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)