이글은
http://phpschool.com/bbs2/inc_view.html?id=36429&code=database2
에서 답변한 글을 가져온 글입니다.
>[제목] load infile~~ 할때, 이런 경우 어떻게 해야하죠
>[글쓴이] 헤줄렛
>
>제가 txt파일루,, 아래와 같이 넣은다고 가정해보겟습니다.
>
>1 | 김일남 | 남자 | 22
>2 | 김이녀 | 여자 | 27
>3 | 김삼남 | 남자 | 23
>4 | 김사남 | 남자 | 21
>
>이때, 테이블은 아래 정의문입니다.
>create table test (
> mb_uid int(15) not null auto_increment ,
> mb_name varchar(60) not null ,
> mb_age tinyint(3) unsigned not null ,
> primary key (mb_uid)
>);
>
>이 같이 정의하고,, load infile구문을 통해,, 저장하려고 합니다.
>
>문제는 txt는 줄변 구분자가 ( | )로 구분되어 있는데, 불필요한것은
>1 | 김일남 | 남자 | 22
>-- ------ ---- --
>필요 필요 불필요 필요
>
>성별부분이네요..
>load infile~할 경우 순서대루 읽어들이는데,, 위 남자까지의 내용만 테이>블에 저장한다는거죠..
>이거.. 원하는 형태루, 성별에 해당되는 데이터를 빼구, 나머지 고유번호,
>이름, 나이만,, 넣는 방법좀 알려주세요..
>그럼 즐일되세요..
>
=============================
상위의 text 파일은 간단하므로 쉽게 수정이 가능하네요
shell> sed 's/|\(남자\|여자\)|/|/gi' data.txt > data.new.txt
그외...
text 파일에서 직접 수정하기 힘들다면 다음의 방법을 사용해 보세요.
우선 txt 파일의 자료 컬럼수과 table 컬럼수가 서로 같거나 table 컬럼수가
더 많아야 합니다.
그런데,
현재 상황이 그 반대이므로 table에서 특정 컬럼을 추가해주어야 합니다.
[table에 임시 mb_sex 컬럼 추가]
mysql> ALTER TABLE test ADD mb_sex varchar(4) NULL AFTER mb_name;
[데이터 입력]
mysql> LOAD DATA LOCAL INFILE '/path/to/data.txt' INTO TABLE test
> FIELDS TERMINATED BY '|';
[mb_sex 컬럼 삭제]
mysql> ALTER TABLE test DROP mb_sex;
이런식으로 하면 됩니다 |