CSV-движок на сервере MySQL

CSV-движок на сервере MySQL

Я не думаю, что это вопрос по программированию, поэтому я задам его здесь -

Читая книгу High Performance MySQL, я прочитал о движке CSV. В абзаце говорится:

Механизм CSV может обрабатывать файлы со значениями, разделенными запятыми (CSV), как таблицы, но не поддерживает индексы для них. Этот механизм позволяет копировать файлы в базу данных и из нее во время работы сервера. Если вы экспортируете файл CSV из электронной таблицы и сохраняете его в каталоге данных сервера MySQL, сервер может прочитать его немедленно. Аналогично, если вы записываете данные в таблицу CSV, внешняя программа может прочитать их немедленно. Таблицы CSV особенно полезны как формат обмена данными и для определенных видов журналирования.

Из этого параграфа я делаю вывод, что могу скопировать файл .CSV в каталог данных базы данных, и он должен отображаться как таблица, из которой можно читать. Однако всякий раз, когда я копирую тестовый файл .csv в каталог, он не отображается как таблица. Я не могу получить к нему доступ.

Я также использую MySQL 5.5.

Кто-нибудь знает, почему это не работает или что я делаю не так?

решение1

Я решил попробовать это на своем сервере MySQL, чтобы увидеть, в чем проблема. Похоже, вам нужно создать таблицу в MySQL (с указанием engine=csv), чтобы таблица была соответствующим образом добавлена ​​в MySQL, и он отслеживал метаданные полей таблицы. В моем тестировании мне не удалось заставить MySQL узнать о файле csv без предварительного использования "create table".

Пример:

  1. Создайте новый CSV-файл с именем foo, в этом примере столбец с именем «i» для целого числа и «c» для символьного поля: CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
  2. foo.frm, foo.CSM, foo.CSV создаются в /var/lib/mysql/data/dbname, вы заметите, что foo.CSV имеет размер ноль байт.
  3. Скопируйте существующий CSV-файл (соответствующий формату, определенному для таблицы) в foo.CSV:

    1,"FOOBAR"
    2,"FOOBAZ"
    3,"BARBAZ"
    
  4. В mysql выборка * из foo должна выдать следующий результат:

    mysql> select * from foo;
    +---+--------+
    | i | c      |
    +---+--------+
    | 1 | FOOBAR |
    | 2 | FOOBAZ |
    | 3 | BARBAZ |
    +---+--------+
    3 rows in set (0.00 sec)
    

Связанный контент