В предыдущих сообщениях блога мы видели 2 использования синтаксиса MySQL SELECT INTO
. Тем не менее, есть третье применение, чтобы узнать и изучить, о чем мы поговорим в этом сообщении в блоге.
Примечание: все данные, имена или наименования, найденные в базе данных, представленной в этом посте, строго используются для практики, обучения, обучения и тестирования. Он ни в коем случае не отображает фактические данные, принадлежащие или используемые какой-либо стороной или организацией.
Используемая ОС и БД:
- Xubuntu Linux 16.04.5 LTS (Xenial Xerus)
- MySQL 5.7.23
Обязательно посетите 2 предыдущих сообщения в блоге из серии о синтаксисе MySQL SELECT INTO
, которую я написал:
Давайте получим представление о произвольных данных, представленных в демонстрационной таблице для этого сообщения в блоге:
mysql> SELECT * -> FROM demo; +----+---------------+ | id | name | +----+---------------+ | 1 | Apples | | 2 | Mark | | 3 | Ham-n-cheese | | 4 | 57 Chevy | | 5 | Little River | | 6 | Happy Time | | 7 | B-52's | | 8 | Peanut Butter | | 9 | Moon Dance | | 15 | Demo Table | | 16 | Max Ammount | | 17 | Happy Days | | 18 | Blue Moon | | 19 | Pale Rider | | 20 | Harmony | +----+---------------+ 15 rows in set (0.00 sec)
Версия SELECT INTO DUMPFILE
несколько отличается от двух других вариантов. В SELECT INTO
документации упоминается, что эта версия синтаксиса полезна для сохранения содержимого типа данных BLOB
в файл.
Ключевое отличие состоит в том, что SELECT INTO DUMPFILE
записывает только одну строку данных в целевой файл.
Тем не менее, должны существовать условия для того, чтобы пользователь запускал эту команду, как я подчеркивал в предыдущих сообщениях блога относительно привилегии FILE
- пользователь должен ее иметь, а файл еще не должен существовать.
В приведенной ниже команде я ' Я запрошу все данные из таблицы demo
и сохраню их с опцией INTO DUMPFILE
:
mysql> SELECT * -> INTO DUMPFILE ‘/var/lib/mysql-files/dmp1’ -> FROM demo; ERROR 1172 (42000): Result consisted of more than one row
Хотя эта команда возвращает ошибку, давайте проверим ее результаты SELECT INTO DUMPFILE
(Примечание: для моей установки Linux доступ к каталогу и файлу должен иметь пользователь root):
shell:/var/lib/mysql-files# cat dmp1 1Apples2Mark
Мы видим, что хотя в таблице demo
существует несколько строк, в файл dmp1
была записана только одна строка. Но одна записанная строка данных фактически является первыми двумя строками таблицы demo
. Также обратите внимание, что для записанных данных нет разделителей и какого-либо форматирования.
Ради любопытства, поскольку мы знаем, что без предложения ORDER BY
в запросе любой порядок набора результатов будет случайным и не гарантированным, давайте повторно выполним ту же команду, записав результаты запроса в другой файл:
mysql> SELECT * -> INTO DUMPFILE ‘/var/lib/mysql-files/dmp1_a’ -> FROM demo; ERROR 1172 (42000): Result consisted of more than one row
Затем проверьте содержимое этого файла:
shell:/var/lib/mysql-files# cat dmp1_a 1Apples2Mark
Это влечет за собой повторную запись первых двух строк.
Я использую предложение WHERE
и отфильтровываю результаты запроса, также сохраняя их:
mysql> SELECT * -> INTO DUMPFILE ‘/var/lib/mysql-files/dmp2’ -> FROM demo -> WHERE id = 1; Query OK, 1 row affected (0.01 sec)
Проверяя эти результаты, мы видим, что в файл была записана только одна строка.
shell:/var/lib/mysql-files# cat dmp2 1Apples
Ранее я отмечал, что в документации упоминается использование SELECT INTO DUMPFILE
для сохранения BLOB
значений в файл.
У меня есть такая простая таблица:
mysql> DESC some_pics; +-------+------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------+------+-----+---------+-------+ | pic | blob | YES | | NULL | | +-------+------+------+-----+---------+-------+ 1 row in set (0.03 sec)
И эти данные, которые представляют собой путь к фотографии двух моих собак:
mysql> SELECT * FROM some_pics; + — — — — — — — — — — — — — — — — — — — — — + | pic | + — — — — — — — — — — — — — — — — — — — — — + | /home/linux_user/Pictures/BooAndAsia.jpg | + — — — — — — — — — — — — — — — — — — — — — + 1 row in set (0.00 sec)
Теперь давайте воспользуемся следующей командой SELECT INTO DUMPFILE
, чтобы сохранить данные таблицы в файл:
mysql> SELECT * -> INTO DUMPFILE ‘/var/lib/mysql-files/pic1’ -> FROM some_pics; Query OK, 1 row affected (0.19 sec)
А затем проверьте содержимое созданного файла:
shell:/var/lib/mysql-files# cat pic1 /home/linux_user/Pictures/BooAndAsia.jpg
SELECT INTO DUMPFILE
вместе с двумя другими версиями синтаксиса SELECT INTO
, являются доступными вариантами для удовлетворения ваших потребностей в сохранении результатов запроса в файлы и / или переменные в MySQL.
Нравится то, что вы прочитали? Видите что-нибудь неправильное? Прокомментируйте, пожалуйста, ниже и спасибо за чтение !!!
Изучите официальное Онлайн-руководство по MySQL 5.7 для получения дополнительной информации.
Призыв к действию!
Спасибо, что нашли время прочитать этот пост. Я искренне надеюсь, что вы открыли для себя что-то интересное и поучительное. Пожалуйста, поделитесь своими выводами здесь с кем-нибудь, кого вы знаете, кто тоже получит от этого такую же ценность.
Посетите страницу Портфолио-проекты, чтобы увидеть сообщения в блоге / технические статьи, которые я написал для клиентов.
Я уже упоминал, как я люблю чашку кофе?!?!
Чтобы получать уведомления по электронной почте (Никогда не спамить) от этого блога (Проза Цифровой Совы) о последних публикациях в блоге по мере их публикации, пожалуйста, подпишитесь (по собственному желанию), нажав кнопку Нажмите, чтобы подписаться! На странице боковая панель на главной странице! (Не стесняйтесь в любое время просмотреть страницу политики конфиденциальности Digital Owl's Prose по любым вопросам, которые могут у вас возникнуть: обновления по электронной почте, подписка, отказ, контактные формы и т. Д.)
Обязательно посетите страницу Best Of, где собраны мои лучшие сообщения в блоге.
Джош Отвелл хочет учиться и расти как разработчик SQL и блогер. Другие любимые занятия находят его, уткнувшись носом в хорошую книгу, статью или командную строку Linux. Среди них он разделяет любовь к настольным ролевым играм, чтению фэнтезийных романов и проведению времени с женой и двумя дочерьми.
Отказ от ответственности: примеры, представленные в этом посте, представляют собой гипотетические идеи о том, как достичь аналогичных результатов. Это не самое лучшее решение. Большая часть, если не все, из представленных примеров выполняется на рабочей станции-среде личного развития / обучения и не должна считаться производственной или готовой к использованию. Ваши конкретные цели и потребности могут отличаться. Используйте те методы, которые лучше всего подходят для ваших нужд и целей. Мнения мои собственные.
Первоначально опубликовано на joshuaotwell.com 24 октября 2018 г.