Load Data : 파일 내용 넣기
2024. 11. 20. 11:07ㆍMySQL/Class
반응형
# load data 를 이용하여, 파일 내용을 DB에 넣으려고 합니다.
(1) 파일 내용
(2) load data
- 구분자를 지정해주 않으면, 하나의 컬럼에 통채로 들어가게 됩니다.
MariaDB [test]> create table temp_1 (emp varchar(20));
Query OK, 0 rows affected (0.02 sec)
MariaDB [test]> load data local infile '/home/mysql/test.txt' into table temp_1;
Query OK, 5 rows affected (0.00 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
MariaDB [test]> select * from temp_1;
+-------------------+
| emp |
+-------------------+
| 11111111,50,testa |
| 22222222,40,testb |
| 33333333,30,testc |
| 44444444,20,testd |
| 55555555,10,teste |
+-------------------+
5 rows in set (0.00 sec)
(3) fields terminated by
- 하지만 우리가 원하는 것은 각 컬럼별로 들어가게 하는게 목적이지 않겠습니까? 방법은 구분자만 알려주면 됩니다.
fields terminated by ','
MariaDB [test]> create table temp_2(emp varchar(10), dbno int, tableno varchar(10));
Query OK, 0 rows affected (0.01 sec)
MariaDB [test]> load data local infile '/home/mysql/test.txt' into table temp_2
-> fields terminated by ',';
Query OK, 5 rows affected (0.01 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
MariaDB [test]> select * from temp_2;
+----------+------+---------+
| emp | dbno | tableno |
+----------+------+---------+
| 11111111 | 50 | testa |
| 22222222 | 40 | testb |
| 33333333 | 30 | testc |
| 44444444 | 20 | testd |
| 55555555 | 10 | teste |
+----------+------+---------+
5 rows in set (0.00 sec)
(4) lines terminated by
- lines terminated by 는 파일 내용에서 어디까지 한 로우인지 지정해주는 옵션입니다.
lines terminated by '\n'
# 예를 들어 원본 파일이 아래와 같습니다.
- '\n'이 없기 때문에 끝까지 파일 내용을 읽게 됩니다.
- 이렇게 되면 데이터를 구분자가 들어갈 만큼만 구분되어 컬럼에 들어가고 마지막 컬럼에는 모든 내용이 전부 넣어지게 됩니다.
MariaDB [test]> load data local infile '/home/mysql/test2.txt' into table temp_3
-> fields terminated by ','
-> lines terminated by '\n'
-> (
-> @code1,
-> @code2,
-> @code3
-> ) SET
-> `emp` = @code1,
-> `dbno` = @code2,
-> `tableno` = @code3
-> ;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1
MariaDB [test]> select * from temp_3;
+----------+------+----------------+
| emp | dbno | tableno |
+----------+------+----------------+
| 11111111 | 50 | testa;22222222 |
+----------+------+----------------+
1 row in set (0.00 sec)
- 구분자를 ';' 값을 끝으로 보았기에 ";"표시된 부분까지만 인식하고 DB에 넣어지게 됩니다.
MariaDB [test]> load data local infile '/home/mysql/test2.txt' into table temp_3
-> fields terminated by ','
-> lines terminated by ';'
-> (
-> @code1,
-> @code2,
-> @code3
-> ) SET
-> `emp` = @code1,
-> `dbno` = @code2,
-> `tableno` = @code3
-> ;
Query OK, 5 rows affected (0.00 sec)
Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
MariaDB [test]> select * from temp_3;
+----------+------+---------+
| emp | dbno | tableno |
+----------+------+---------+
| 11111111 | 50 | testa |
| 22222222 | 40 | testb |
| 33333333 | 30 | testc |
| 44444444 | 20 | testd |
| 55555555 | 10 | teste
|
+----------+------+---------+
5 rows in set (0.00 sec)
* 마지막 로우가 왜 저렇게 변하는지 확인이 좀 필요해보입니다. ㅠㅠ
(5) Tip?
- 컬럼에 다른 값을 넣고 싶을때 이렇게 하는 것도 좋은 방법입니다.
load data local infile '/home/mysql/test2.txt' into table temp_3
fields terminated by ','
lines terminated by ';'
(
@code1,
@code2,
@code3
) SET
`emp` = @code2,
`dbno` = @code3,
`tableno` = @code1
반응형
'MySQL > Class' 카테고리의 다른 글
log-slave-updates (0) | 2024.11.18 |
---|---|
M2(Mac)용 VMWare로 가상화 만들기 - (9) xtrabackup (2) | 2024.11.17 |
pt-table-checksum 사용 (4) | 2024.11.16 |
M2(Mac)용 VMWare로 가상화 만들기 - (8) pt-toolkit 설치 (0) | 2024.11.15 |
세션수 확인 (2) | 2024.11.12 |