В предыдущих сообщениях блога мы видели 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 г.