Назад | Перейти на главную страницу

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

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

Читая книгу о высокой производительности mysql, я читал о движке CSV. В абзаце говорится:

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

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

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

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

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

Пример:

  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)