프로그래밍에 관한 질문은 아닌 것 같아 여기에 질문드립니다.
고성능 mysql 책을 읽으면서 CSV 엔진에 대해 읽었습니다. 단락은 다음과 같이 말합니다.
CSV 엔진은 쉼표로 구분된 값(CSV) 파일을 테이블로 처리할 수 있지만 해당 파일에 대한 인덱스는 지원하지 않습니다. 이 엔진을 사용하면 서버가 실행되는 동안 데이터베이스 안팎으로 파일을 복사할 수 있습니다. 스프레드시트에서 CSV 파일을 내보내어 MySQL 서버의 데이터 디렉터리에 저장하면 서버에서 즉시 읽을 수 있습니다. 마찬가지로 CSV 테이블에 데이터를 쓰면 외부 프로그램에서 즉시 읽을 수 있습니다. CSV 테이블은 데이터 교환 형식과 특정 종류의 로깅에 특히 유용합니다.
이 단락에서 얻은 것은 .CSV 파일을 데이터베이스의 데이터 디렉터리에 복사할 수 있고 읽을 수 있는 테이블로 표시되어야 한다는 것입니다. 그러나 테스트 .csv 파일을 디렉터리에 복사할 때마다 테이블로 나타나지 않습니다. 액세스할 수 없습니다.
나는 또한 MySQL 5.5를 사용하고 있습니다
왜 이것이 작동하지 않는지 또는 내가 뭘 잘못하고 있는지 아는 사람이 있습니까?
답변1
나는 문제가 무엇인지 확인하기 위해 MySQL 서버에서 이것을 시험해 보기로 결정했습니다. 테이블이 MySQL에 적절하게 추가되고 테이블 필드 메타데이터를 추적할 수 있도록 MySQL(engine=csv 지정)에서 테이블을 생성해야 하는 것으로 보입니다. 테스트에서 먼저 "테이블 만들기"를 사용하지 않고는 MySQL이 csv 파일을 학습하도록 할 수 없었습니다.
예:
- 이 예에서는 정수의 경우 "i"라는 열, 문자 필드의 경우 "c"라는 열에 foo라는 새 csv를 만듭니다.
CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
- foo.frm, foo.CSM, foo.CSV는 /var/lib/mysql/data/dbname에 생성되며 foo.CSV는 0바이트입니다.
테이블에 정의된 형식과 일치하는 기존 csv를 foo.CSV에 복사합니다.
1,"FOOBAR" 2,"FOOBAZ" 3,"BARBAZ"
mysql에서는 foo에서 *를 선택하면 다음 결과가 생성됩니다.
mysql> select * from foo; +---+--------+ | i | c | +---+--------+ | 1 | FOOBAR | | 2 | FOOBAZ | | 3 | BARBAZ | +---+--------+ 3 rows in set (0.00 sec)