Аналогично тому, как данные импортируются из файла командой LOAD DATA INFILE, можно записи таблицы скопировать обратно в файл. Для этого предназначается конструкция SELECT...INTO OUTFILE. Эта конструкция позволит сделать все, что делается с помощью обычного оператора SELECT, а затем отправить полученный набор записей обратно в файл.
Дилемма ограничителей
Как команда LOAD DATA INFILE, так и команда SELECT...INTO OUTFILE поддерживают использование дополнительных ключевых слов и предложений, предназначенных для определения формата файла данных.
• Предложение LINES TERMINATED BY задает ограничитель конца записи (по умолчанию - это символ перехода на новую строку "n").
• Предложение FIELDS задает ограничитель поля, а за ним может следовать одно (или более) ключевое слово TERMINATED BY, ESCAPED BY или ENCLOSED BY. Эти ключевые слова задают ограничитель конца поля (по умолчанию это символ табуляции "t"), последовательность специальных символов при чтении и записи значений (по умолчанию это символ "") и символ, в который заключаются поля (значение по умолчанию отсутствует), соответственно.
Следующая команда копирует все эти записи в текстовый файл accounts.txt, расположенный на сервере.
Листинг 9.74.
mysql> SELECT accountName, accountBalance FROM accounts INTO OUTFILE
'accounts.txt';
Query OK, 11 rows affected (0.06 sec) Получаем следующий результат.
Sue U 388883.13 Jacob N 18410.00
Очевидно, что здесь можно использовать предложение WHERE (или любое другое предложение или ключевое слово, допустимое по синтаксису оператора SELECT) для еще большей детализации полученной выборки. В следующем примере продемонстрирована выборка в файл /tmp/high-value-accounts.txt только таких записей, в которых остаток на счету превышает 5 тыс. долл.
Листинг 9.76.
mysql> SELECT accountNumber, accountName, accountBalance FROM accounts WHERE accountBalance > 50000 INTO OUTFILE '/tmp/high-value-accounts.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'rn';
Query OK, 5 rows affected (0.00 sec)
А вот и результат:
Листинг 9.77.
"2147483647", "Timothy J","56347.50"
"5739304575", "Harish K","996 564.88"
"2173467271", "Kingston X", "634238.00"
"2384371001", "Anil V", "72460.00"
"2388282010", "Sue U","388883.13"
Файл, заданный в предложениях INTO OUTFILE и INTO DUMPFILE, будет записан в файловую систему сервера и не должен уже существовать. Так как файл будет записываться пользователем сервера MySQL, этот пользователь должен обладать правом на запись файлов в указанный каталог. Исходя из соображений безопасности, MySQL не разрешает записывать выводной файл в клиентскую файловую систему с применением этого метода. Поэтому клиентское приложение должно выбирать их с сервера с помощью других методов.
Выгружено!
Для выборки двоичных данных (содержимого полей типа BLOB, например) из базы данных в файл, предложение INTO OUTFILE нужно заменить предложением INTO DUMPFILE. Это позволит производить запись данных в файл как одной строки (без символов завершения записей и полей), не допуская тем самым разрушения двоичных данных.
Рядовые
Зарегистрировавшийся пользователь должен обладать привилегией FILE на сервере для того, чтобы иметь возможность выполнения команд SELECT...INTO OUTFILE и LOAD DATA INFILE. В главе 14, "Безопасность, управление доступом и привилегии", подробнее рассказывается о том, как работает система привилегий MySQL.
Как и с командой LOAD DATA INFILE, здесь можно задать ограничители полей и записей выгружаемых данных (см. врезку "Дилемма ограничителей"). Это показано в следующих примерах:
mysql> SELECT name, phone, email, fax FROM members INTO OUTFILE '/usr/local/data/members.txt' FIELDS TERMINATED BY ■|" ENCLOSED BY '"' ESCAPED BY 'W;
Query OK, 32 rows affected (0.00 sec)
mysql> SELECT title, author, isbn FROM books INTO OUTFILE '/home/me/books.asc' FIELDS TERMINATED BY',' LINES TERMINATED BY ■rn-;
Query OK, 255 rows affected (0.17 sec)
Для выгрузки содержимого всей базы данных или одной таблицы можно воспользоваться возможностями утилиты mysqldump. Подробнее об использовании этой утилиты для резервирования и восстановления ваших баз данных MySQL можно узнать в главе 15, "Обслуживание, резервное копирование и восстановление".
Резюме
В этой главе более подробно описаны команды манипулирования данными, которыми располагает язык SQL (вместе с некоторыми нестандартными командами, присущими только диалекту MySQL). Это такие команды, как:
■ INSERT - используется для добавления записей в таблицы;
■ UPDATE - используется для обновления уже существующих записей;
■ REPLACE - используется для замены существующих записей;
■ DELETE и TRUNCATE - используются для удаления записей;
■ SELECT (и ее различные варианты) -используется для выборки наборов данных, удовлетворяющих определенному критерию;
■ LOAD DATA INFILE - используется для импортирования данных из текстовых файлов в таблицы MySQL.
Итак, у вас уже должно быть сформировано более глубокое понимание того, как взаимодействуют между собой различные команды SQL и как они взаимодействуют с приложениями. Дальнейший процесс ознакомления читателя с новыми и более совершенными возможностями MySQL (включая подзапросы, транзакции и оптимизацию запросов) базируется на материале, изложенном в этой и во всех предыдущих главах.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Экспорт записей
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Копирование, импорт и экспорт записей | Все о MySQL. Объединения |