2016-01-20 2 views
1

У меня есть база данных записей, состоящая из «имени», «идентификатора» и «описания», но в настоящее время поле «описание» установлено к файловому пути файла .txt, который фактически содержит содержимое описания. Каждое имя .txt-файла - это идентификатор каждой строки, плюс расширение .txt, и все они находятся в одном каталоге.Загрузите и замените строку пути файла содержимым из этого файла в базе данных MySQL

Могу ли я загрузить и заменить каждое поле описания содержимым из соответствующего текстового файла (используя MySQL)?

ответ

1

Вы не можете напрямую написать запрос MySQL, который будет считывать значения описания из вашей файловой системы. Это потребует, чтобы сервер MySQL мог читать исходный текст из файлов в вашей файловой системе. Вы не можете этого сделать ™.

Вы, безусловно, можете написать программу на своем любимом языке хоста (php, java, PERL, вы его называете), чтобы читать строки из своей базы данных и обновлять строки описания.

Возможно, вам удастся создать команду LOAD DATA INFILE для чтения каждого текстового файла. Но текстовые файлы должны быть очень тщательно отформатированы, чтобы напоминать файлы CSV или TSV.

+0

Ну, это не совсем так. – Shadow

1

Purely using mysql это было бы трудным, если не невозможным упражнением, потому что mysql действительно не предлагает никаких средств для открытия файлов.

Единственный способ открыть внешний текстовый файл из mysql - использовать команду LOAD DATA INFILE, которая импортирует текстовый файл в таблицу mysql. Что вы можете сделать, так это написать хранимую процедуру в mysql, которая:

  1. Создайте временную таблицу с полем описания, достаточно большим, чтобы вместить все описания.
  2. Считывает все содержимое идентификатора и описания в курсор из базовой таблицы.
  3. Прокрутите курсор и используйте данные загрузки infile, чтобы загрузить данные данного текстового файла во временную таблицу. Здесь все может пойти не так. Учетная запись, в соответствии с которой запускает mysql daemon/service, должна иметь доступ к каталогам и файлам, где хранятся файлы описания. Вы также должны иметь возможность параметризовать команду load data infile, чтобы прочитать полное содержимое текстового файла в одном поле, поэтому вам нужно установить поле и строку, завершенные параметрами, таким значениям, которые не могут быть найдены ни в одном из файлов описания , Но даже для этого вам нужно использовать собственный UDF (пользовательская функция), которая может выполнять программы командной строки, потому что запуск load data infile непосредственно из хранимых процедур не разрешен.

См. Using LOAD DATA INFILE with Stored Procedure Workaround-MySQL для получения полного описания.

  1. Выдать инструкцию обновления, используя идентификатор из курсора, чтобы обновить поле описания в вашей базовой таблице из временной таблицы.
  2. Удалите запись из таблицы темпа.
  3. Перейти к 3.

Это может быть намного легче достичь этого внешнего языка программирования, который имеет лучшие функции манипулирования файлами и может обновлять каждую запись в базовой таблице соответственно.

Смежные вопросы