Spec-Zone .ru
спецификации, руководства, описания, API
|
SELECT ... INTO
форма SELECT
позволяет результату запроса быть сохраненным в переменных или записанным файлу:
SELECT ... INTO
выбирает значения столбцов и хранит их в переменные. var_list
SELECT ... INTO OUTFILE
пишут выбранные строки в файл.
Столбец и разделители строки могут быть определены, чтобы произвести определенный выходной формат.
SELECT ... INTO DUMPFILE
пишет единственная строка в
файл без любого форматирования.
SELECT
описание синтаксиса (см. Раздел 13.2.9,"SELECT
Синтаксис"), показывает INTO
пункт около
конца оператора. Также возможно использовать INTO
сразу после select_expr
список.
INTO
пункт не должен использоваться во вложенном SELECT
потому что такой SELECT
должен возвратить его результат внешнему контексту.
INTO
пункт может назвать список одной или более переменных, которые могут быть
определяемыми пользователем переменными, хранимой процедурой или параметрами функции, или сохраненными
локальными переменными программы. (В пределах готового SELECT ... INTO OUTFILE
оператор, только определяемые пользователем переменные разрешаются; см. Раздел
13.6.4.2, "Контекст локальной переменной и Разрешение".)
Выбранные значения присваиваются переменным. Число переменных должно соответствовать число столбцов. Запрос
должен возвратить единственную строку. Если запрос не возвращает строк, предупреждения с кодом ошибки, 1329
происходит (No data
), и значения переменных остаются неизменными. Если запрос
возвращает многократные строки, ошибка, 1172 происходит (Result consisted of more than one
row
). Если возможно, что оператор может получить многократные строки, можно использовать LIMIT 1
ограничить набор результатов единственной строкой.
SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;
Пользовательские имена переменной не являются чувствительными к регистру. См. Раздел 9.4, "Определяемые пользователем Переменные".
SELECT ... INTO OUTFILE '
форма file_name
'SELECT
пишут выбранные строки в файл. Файл создается на узле сервера, таким
образом, Вы должны иметь FILE
полномочие использовать этот синтаксис. file_name
не может быть
существующий файл, который между прочим предотвращает файлы такой как /etc/passwd
и таблицы базы данных от того, чтобы быть уничтоженным. character_set_filesystem
системная переменная управляет интерпретацией имени
файла.
SELECT ... INTO OUTFILE
оператор предназначается прежде всего, чтобы позволить
Вам очень быстро выводить таблицу к текстовому файлу на машине сервера. Если Вы хотите создать получающийся файл
на некотором другом узле чем узел сервера, обычно невозможно использовать SELECT ... INTO OUTFILE
с тех пор нет никакого способа записать путь к файлу
относительно файловой системы узла сервера.
Однако, если клиентское программное обеспечение MySQL устанавливается на удаленной машине, можно вместо этого
использовать клиентскую команду такой как mysql -e "SELECT ..." >
генерировать файл на хосте клиента. file_name
Также возможно создать получающийся файл на различном узле кроме узла сервера, если к расположению файла на удаленном узле можно получить доступ, используя отображенный на сеть путь на файловой системе сервера. В этом случае присутствие mysql (или некоторая другая клиентская программа MySQL) не требуется на целевом узле.
SELECT ... INTO OUTFILE
дополнение LOAD DATA INFILE
. Значения столбцов пишутся преобразованный в набор символов,
определенный в CHARACTER SET
пункт. Если никакой такой пункт не присутствует,
значения выводятся, используя binary
набор символов. В действительности нет
никакого преобразования набора символов. Если набор результатов будет содержать столбцы в нескольких наборах
символов, то файл выходных данных будет также, и Вы не можете быть в состоянии перезагрузить файл правильно.
Синтаксис для export_options
часть оператора состоит из того же самого
FIELDS
и LINES
пункты, которые используются с LOAD DATA INFILE
оператор. См. Раздел
13.2.6,"LOAD DATA INFILE
Синтаксис", для информации о FIELDS
и LINES
пункты, включая их значения по
умолчанию и допустимые значения.
FIELDS ESCAPED BY
средства управления, как записать специальные символы. Если FIELDS ESCAPED BY
символ не пуст, он используется когда необходимо, чтобы избежать
неоднозначности как префикса, который предшествует следующим символам на выводе:
FIELDS ESCAPED BY
символ
FIELDS [OPTIONALLY] ENCLOSED BY
символ
Первый символ FIELDS TERMINATED BY
и LINES TERMINATED BY
значения
ASCII NUL
(оцененный нулю байт; то, что фактически
пишется после символа ESC, является ASCII"0
", не оцененный нулю байт)
FIELDS TERMINATED BY
, ENCLOSED BY
, ESCAPED BY
, или LINES TERMINATED BY
символов нужно оставить так, чтобы можно было читать, файл въезжают задним ходом
достоверно. ASCII NUL
оставляется, чтобы облегчить просматривать с некоторыми
пейджерами.
Получающийся файл не должен соответствовать синтаксису SQL, таким образом, ничто иное не должно быть оставленным.
Если FIELDS ESCAPED BY
символ пуст, никаких символов не оставляют и NULL
выводится как NULL
, нет \N
. Это - вероятно, не хорошая идея определить пустой символ ESC, особенно если
значения полей в Ваших данных содержат какой-либо из символов в списке, только данном.
Вот пример, который производит файл в разделенных от запятой значениях (CSV) формат, используемый многими программами:
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
Если Вы используете INTO DUMPFILE
вместо INTO OUTFILE
,
MySQL пишет только одну строку в файл без любого столбца или завершения строки и не выполняя обработки escape.
Это полезно, если Вы хотите сохранить a BLOB
значение в файле.
Любой файл, создаваемый INTO OUTFILE
или INTO
DUMPFILE
перезаписываемо всеми пользователями на узле сервера. Причина этого состоит в том, что
сервер MySQL не может создать файл, который принадлежит любому кроме пользователя, при учетной записи
которого он работает. (Никогда недопустимо выполнять mysqld как root
для этого и
других причин.) Файл таким образом должен быть мировым перезаписываемым так, чтобы можно было управлять его
содержанием.
Если secure_file_priv
системная переменная устанавливается в непустое имя
каталога, файл, который будет записан, должен быть расположен в том каталоге.
В контексте SELECT ... INTO
операторы, которые происходят как часть событий, выполняемых
Планировщиком События, сообщения диагностики (не только ошибки, но также и предупреждения) пишутся журналу
ошибок, и, на Windows, к журналу событий приложения. Для дополнительной информации см. Раздел
19.4.5, "Состояние Планировщика События".