Книги, научные публикации Pages:     | 1 |   ...   | 7 | 8 | 9 | 10 | 11 |

мтт. ...

-- [ Страница 9 ] --

Х MYSQL_PWD. Используемый для подключения к серверу MySQL пароль. Установка переменной MYSQL_PWD аналогична определению опции --password. Х MYSQL_TCP_PORT. Для клиентских программ эта переменная определяет номер порта, используемого для установления TCP/IPсоединения с сервером. Серверу mysqld эта переменная указывает порт, от которого следует ожидать запрос на установление TCP/IP Приложение Д. Программы MySQL соединения. Установка переменной MYSQL_TCP_PORT аналогична определению опции Чport. Х MYSQL_UNIX_PORT. Для клиентских профамм эта переменная определяет файл разъема, используемый для установления соединения через разъем домена UNIX с сервером, работающим на компьютере localhost. Серверу mysqld эта переменная указывает разъем, по которому следует ожидать локального подключения. Установка переменной MYSQL_UNIX_PORT аналогична определению опции Чsocket. Х TMPDIR. Путь и имя каталога, в котором создаются временные файлы. Установка этой переменной аналогична использованию опции Чtmpdir. Х USER. Эта переменная определяет имя пользователя MySQL, используемое при подключении к серверу. Она используется только клиентскими программами, работающим под управлением Windows, и аналогична опции Чuser. Клиентская программа mysql проверяет также значение следующих переменных. Х MYSQL_HISTFILE. Эта переменная определяет имя файла, используемого для хранения журнала командной строки. По умолчанию для нее устанавливается значение $НОМЕ/.mysql_history, где $НОМЕ Ч месторасположение корневого каталога. Х MYSQL_HOST. Эта переменная определяет имя компьютера, с которым необходимо установить соединение для подключения к серверу. Установка этой переменной аналогична использованию опции Чhost.

Утилиты isamchk И myisamchk Эти утилиты применяются для проверки и отладки поврежденных таблиц, вывода информации о таблицах, проведения анализа распределения значений ключей индексов, а также их активизации и деактивизации. Более детальная информация об анализе ключей и работе с индексами представлена в главе 4, "Оптимизация запросов". В главе 13, "Поддержка и восстановление баз данных", подробно рассказывается о процедурах проверки и отладки таблиц. Утилита myisamchk используется для работы с таблицами, представленными в новом формате MylSAM. Имена файлов данных и индексов таких таблиц имеют расширения MYD и MYI соответственно. Для обработки таблиц, записанных в более старом формате хранения ISAM, используется утилита isamchk. Имена файлов данных и индексов таких таблиц имеют расширения ISD и ISM. Если запустить любую из этих утилит для 676 Часть IV. Приложения таблицы неверного типа, утилита выдаст сообщение об ошибке и таблицу обрабатывать не будет. Важно помнить также, что нельзя выполнять проверку или отладку таблицы, пока с ней работает сервер MySQL! В главе 13, "Поддержка и восстановление баз данных", рассказывается, как заблокировать использование таблицы на время работы утилит myisamchk и isamchk. Использование isamchk (options] tbl_name[.ISM] myisamchk [options] tbl_name[.MYI] Если при вызове утилит не задается ни одна опция, эти утилиты просто проверяют таблицы на наличие ошибок. Во всех остальных случаях таблицы обрабатываются в соответствии со значением заданных опций. В качестве аргумента tbljiame можно задавать как имя таблицы, так и название ее файла индекса (с расширением ISM или MYI). Использование названий файлов индексов предпочтительней, поскольку позволяет с помощью специальных символов задать проверку (или отладку) всех таблиц одного формата сразу. Так, например, для проверки всех таблиц текущего каталога достаточно ввести следующие команды:

% isamchk *.ISD % myisamchk *.MYI Эти утилиты не ищут самостоятельно заданные таблицы, поэтому если файлы таблиц не располагаются в текущем каталоге, их расположение следует задать явным образом. Так как для проверки утилитами isamchk и myisamchk файлы таблиц необязательно должны размещаться в каталоге данных сервера, их можно легко скопировать в другой каталог и выполнить проверку копий. Некоторые опции этих программ связаны с номерами индексов. Подсчет индексов начинается с 1. Чтобы определить нумерацию индексов для отдельной таблицы, можно запустить оператор SHOW INDEX или воспользоваться командой mysqlshow Чkeys. В списке столбца Key_name индексы указаны в таком же порядке, в котором они используются утилитами myisamchk и isamchk. Риск при использовании переменной MYSQL_PWD Хранение пароля в переменной MYSQL_PWD несет в себе определенную угрозу безопасности, поскольку другие пользователи могут легко прочитать ее значение. Так, например, значения переменных среды других пользователей можно просмотреть с помощью утилиты ps.

Приложение Д. Программы MySQL Стандартные опции, поддерживаемые утилитами isamchk И myisanchk Чdebug Чhelp --set-variable --silent --verbose --version При задании опции Чsilent на экран выводятся только сообщения об ошибках. Опция Чverbose, наоборот, выводит на экран помимо основной еще и дополнительную информацию, особенно если задается вместе с опциями Чdescription и Чextend-check (для обеих программ) или опциями Чcheck (для программы myisamchk). Для усиления эффекта опции Чsilent и Чverbose можно задавать по несколько раз. Общие ОПЦИИ утилит isamchk и myisamchk Утилиты isamchk и myisamchk имеют множество общих опций. Х -а, Чanalyse. Выполняет анализ распределения ключей. Это позволяет серверу быстрей выполнять поиск с помощью индексов и процедуру объединения таблиц. Чтобы после выполнения анализа получить информацию о распределении ключей, достаточно еще раз запустить эти утилиты с опциями Чdescription и Чverbose. Х -b я, Чblock-search=/i. Выводит начало строки таблицы, которая содержит начало блока и. Эта опция используется только в целях отладки. Х -d, Чdescription. Выводит описательную информацию о таблице. Х -е, Чextend-check. Выполняет расширенную проверку таблицы. Эта опция, как правило, используется редко, поскольку утилиты myisamchk и isamchk находят все ошибки и при работе в обычном режиме проверки. Х -f, Чforce. Запускает проверку или исправление таблицы, даже если временный файл для нее уже существует. Как правило, если утилиты myisamchk и isamchk находят файл ?6/_яате.ТМО, то выводят сообщение об ошибке и завершают свою работу. Это объясняется тем, что существование такого файла может указывать на проверку данной таблицы другой программой. Хотя временный файл будет также существовать и в том случае, если программа проверки внезапно завершила свою работу и не успела корректно удалить файл Если администратор уверен, что наличие файла объясняется именно последней причиной, то можно воспользоваться опцией Чforce. (Либо же можно самостоятельно удалить временный файл.) Если опция Чforce используется для проверки таблиц, программа автоматически перезапускается с опцией --recover для каждой таблицы, в которой обнаружены ошибки. 678 Часть IV. Приложения Х -i, Чinformation. Выводит статистическую информацию о содержимом таблицы. Х -k п, Чkeys-used=n. Эта опция используется вместе с опцией recover и указывает MySQL обновить только первые и индексов. Другими словами, она деактивизирует все индексы с номером больше п. Опцию Чkey-used можно использовать для повышения эффективности работы операторов INSERT, DELETE и UPDATE. При определении номера индекса 0 отключаются все индексы. Аналогичным образом, определение номера индекса, равного наибольшему номеру индекса таблицы, приводит к включению всех индексов. Х -1, Чno-symlinks. Если в качестве аргумента таблицы выступает символическая связь, обработке, как правило, подлежит таблица, на которую эта связь указывает. Если определена эта опция, символические связи не используются, а заменяются новыми (исправленными) версиями файлов таблиц. Х -q, Чquick. Эта опция используется вместе с опцией Чrecover для ускорения отладки. Если заданы обе эти опции, файл данных не изменяется. Чтобы заставить программу изменять файл данных даже при нахождении дублирующих значений ключей, определите опцию Чquick дважды. В этом случае не забудьте сначала создать резервную копию файла данных. Х -г, --recover. Выполняет обычную процедуру отладки. Эта опция позволяет устранить практически все ошибки за исключением дублирования значений в уникальных индексах. Х -о, Чsafe_recover. Использует более медленный режим отладки, чем задаваемые опцией -recover. Это позволяет устранить некоторые проблемы, которые обычный режим преодолеть не в состоянии. Х -s, Чsort-index. Сортирует блоки индексов для ускорения последовательного считывания блоков. Х -R п, Чsort-records=л. Сортирует записи данных в соответствии с порядком их расположения в индексе п. В результате ускоряется процедура восстановления, основанная на этом индексе. Если данная операция запускается для таблицы впервые, она займет много времени, поскольку в начале записи не упорядочены. Х -u, --unpack. Распаковывает запакованный файл. Утилита myisamchk в состоянии распаковывать MyISAM-файлы, запакованные программой myisampack. Утилита isamchk в состоянии распаковывать ISAM-файлы, запакованные программой pack_isam. Эту опцию можно также использовать для преобразования сжатых и доступных только для чтения таблиц в изменяемый формат. Приложение Д. Программы MySQL Х -W, Чwait. Если заданная таблица заблокирована, запущенные с этой опцией утилиты не выполняют свою работу до тех пор, пока блокировка не будет снята. Если же опция --wait не определена, утилита ожидает 10 секунд и, если блокировка не снимается, выдает сообщение об ошибке. Специальные опции утилиты myisamchk Если утилита isamchk не содержит каких-либо специальных опций, то у утилиты myisamchk они имеются. я Х -С, --check. Проверяет таблицы на наличие ошибок. Если опции не определены, эта операция выполняется по умолчанию. -D п, Чdata-file-length=H. Определяет максимально возможную длину, до которой может увеличиваться файл данных при заполнении. (Это происходит при достижении файлом лимита, установленного MySQL, или ограничений файловой системы. Кроме того, число строк может также ограничиваться внутренней структурой данных таблицы.) Данное значение задается в байтах. Эта опция оказывается полезной только при использовании вместе с опциями --recover или Чsafe-recover. -F, Чfast. Отменяет проверку таблиц, которые не изменялись с момента последней проверки. -m, --medium-check. Использует более быстрый метод проверки, чем расширенный, но в то же время менее детализированный. (Согласно справочной информации об утилите myisamchk, этот метод в состоянии обнаружить "только" 99,99% всех ошибок.) В большинстве случаев данного режима проверки оказывается более чем достаточно. Данный метод проверки основан на расчете значений CRC для ключей индекса и их сравнения со значениями CRC, рассчитанными на основании индексированных столбцов файла данных. -Т, Чread-only. Не помечает таблицы как проверенные.

Х и Х я -А, [п], Чset-auto-increment [=n]. Определяет отсчет значений AUTO_INCREMENT с числа п (или с еще большего значения, если таблица уже содержит записи со значениями AUTO_INCREMENT, большими чем п). Если значение п не определено, эта опция устанавливает следующее значение AUTO_INCREMENT на единицу большим текущего максимального. Х -t path_name, --tmpdir=path_name. Определяет путь к каталогу, используемому для хранения временных файлов. Если эта переменная не установлена, по умолчанию используется значение переменной среды TMPDIR или каталог /tmp. 680 Часть IV. Приложения Переменные утилит isamchk И myisamchk Используя опцию Чset-variable, можно установить следующие переменные утилит isamchk и myisamchk. и Х ш Х key_buffer_size. Размер буфера, используемого для хранения блоков индексов. read_buf f er_size. Размер буфера чтения, write_buf f er_size. Размер буфера записи. sort_buffer_size. Размер буфера, используемого для операций сортировки значений ключей (используется для опции --recover, но не для --saf e_recover). sort_key_blocks. Эта переменная связана с глубиной структуры В-дерева, используемого для индексов. Нет необходимости изменять ее значение. decode_bits. Число разрядов, используемых для шифрования сжатых таблиц. Установка больших значений приведет к ускорению выполнения операции, однако потребует большего объема памяти. В большинстве случаев достаточно установленного по умолчанию значения Х Х УТИЛИТЫ myisampack и packisam Утилиты myisampack и pack_isam используются для создания сжатых и предназначенных исключительно для чтения таблиц. Они позволяют уменьшить размеры от 40 до 70% и в то же время обеспечивают высокую скорость доступа. Утилита myisampack сжимает таблицы MylSAM и может работать со столбцами всех типов. Программа pack_isarn работает с таблицами ISAM, но способна обрабатывать только таблицы, не содержащие столбцы типа BLOB и TEXT. Программы myisampack и pack_isam не включаются в инсталляцию MySQL по умолчанию, однако доступны пользователям, заказавшим 10 и более лицензий или заключивших соглашение о расширенном уровне поддержки. Вполне возможно, что эти компоненты дистрибуции MySQL могут предоставляться на тех же условиях, что и остальные. (Детальную информацию о текущей поддержке и лицензировании можно найти в справочном руководстве по MySQL.) Для считывания таблиц, сжатых описываемыми здесь утилитами, не требуется какая-либо специальная версия MySQL. Это делает утилиты myisampack и pack_isam исключительно полезными для приложений, с помощью которых обеспечивается доступ к таблицам с архивной или энциклопедической информацией. Эта информация, конечно же, доступна только для чтения и не требует обновления. Приложение Д. Программы MySQL Чтобы преобразовать сжатый файл в обычную изменяемую форму, достаточно запустить одну из команд myisamchk --unpack (для таблиц MylSAM) или isamchk --unpack (для таблиц ISAM). Утилиты myisampack и pack_isam сжимают файлы данных, но не затрагивают файлы индексов. Для обновления последних необходимо по завершению работы программы myisampack запустить команду myisamchk -rq, а по завершении работы программы isamchk Ч команду isamchk -rq.

Использование myisampack [options] tbl name... pack_isam [options] tbl_name... В качестве аргумента tbl_name может выступать как название таблицы, так и название ее файла индекса (MYI-файл для MyISAM-таблицы и ISM-файл для таблицы ISAM). Если файлы таблиц размещаются не в текущем каталоге, необходимо определить полный путь к ним.

Стандартные опции, поддерживаемые утилитами myisampack И pack_isam -debug -help --silent --verbose --version Общие ОПЦИИ утилит myisampack И pack_isam -b, Чbackup. Указывает утилитам myisampack и pack_isam перед сжатием сделать резервную копию каждой заданной аргументом (Ы_пате таблицы. Файл резервной копии имеет имя 1Ы_пате.оъо. -f, Чforce. Указывает выполнять сжатие даже в том случае, если результирующий файл больше исходного или для таблицы уже существует временный файл. Как правило, если утилиты myisampack и pack_isam находят файл tbl_name.TMD, то выводят сообщение об ошибке и завершают свою работу. Это объясняется тем, что существование такого файла может указывать на проверку данной таблицы другой программой. Хотя временный файл будет также существовать и в том случае, если программа проверки внезапно завершила свою работу и не успела корректно удалить файл. Если администратор уверен, что существование файла объясняется именно последней причиной, можно воспользоваться опцией Чforce. -j join_tbl, Ч-join=join_tbl. Объединяет все указанные в командной строке таблицы в одну сжатую таблицу с именем join_tbl. Для Часть IV. Приложения этого все объединяемые таблицы должны иметь одинаковую структуру (а именно названия столбцов, их типы и индексы). Х -t, Чtest. Работает в режиме тестирования. В этом режиме выводится информация о результатах, которые можно было бы получить в случае реального сжатия таблицы. Х -Т pathjiame, --tmpdir=path_name. Определяет путь к каталогу, используемому для хранения временных файлов. Х -w, Чwait. Ожидает некоторое время и предпринимает повторную попытку сжатия, если на момент запуска программы команда кем-либо используется. Не рекомендуется обрабатывать таблицу, которая в процессе сжатия изменяется другими пользователями. Специальные опции pack_isam Если утилита myisampack не содержит каких-либо специальных опций, то для утилиты pack_isam существует одна такая опция, -р я, Чpacklength=л. С помощью этой опции можно определить объем, выделяемый для хранения длины записи, в п байт, где п может быть целочисленным значением в диапазоне от 1 до 3. Программа pack_isam автоматически пытается определить число байт, необходимое для записи длины каждой строки сжимаемой таблицы. В некоторых случаях она может определить, что для хранения необходим даже меньший объем, чем задается. Если это действительно так, утилита packisam выдаст сообщение о данном факте. Пользователь имеет возможность позже запустить программу pack^isam снова и задать меньшую длину с помощью опции --packlength. Это позволит сохранить немного дискового пространства. Утилита mysql Клиент mysql представляет собой интерактивную программу, используемую для подключения к серверу, отправки запросов и просмотра результатов их выполнения. Утилита mysql может работать в пакетном режиме, что позволяет исполнять записанные в файле запросы, перенаправив командный вход на чтение данного файла. Это можно осуществить, например, следующим образом:

% mysql -u paul -p -h pit-viper.snake.net saop_db < my_query_file При запуске в интерактивном режиме программа mysql выводит на экран строку подсказки "mysql>", отражая тем самым, что ожидает ввода команды. Для запуска запроса введите его текст (используя, если необходимо, несколько строк), завершив ввод символом ";

" (точка с запятой) или "\д"- Программа отправит запрос к серверу, отобразит резульПриложение Д. Программы MySQL таты выполнения этого запроса и снова выведет строку подсказки, показывая свою готовность к выполнению следующего запроса. Строка подсказки mysql (см. ниже) может изменяться в зависимости от содержания, которое программа ожидает от пользователя. Ожидается первая строка нового запроса. Ожидается следующая строка текущего запроса. Ожидается завершение выделенной одинарными кавычками строки текущего запроса. "> Ожидается завершение выделенной двойными кавычками строки текущего запроса. Строки подсказки ">" и "">" отражают, что пользователь начал выделенную одинарными или двойными кавычками строку и не ввел в конце завершающие кавычки. Как правило, это происходит из-за забывчивости пользователей. Для исправления подобной оплошности и выхода из строкового режима введите завершающий символ и затем последовательность "\с", чтобы отменить текущий запрос. В интерактивном режиме работы mysql все запросы сохраняются в файле журнала. По умолчанию таковым является файл $HOME/.mysql_history, однако с помощью переменной MYSQL_HI STORY его можно изменить. Из созданного журнала запросы можно повторно вызывать и запускать, предварительно редактируя или оставляя их неизменными. В расположенном ниже списке представлены некоторые комбинации клавиш команд редактирования, а также их описание (клавиши со стрелками могут не работать в среде ОС Windows).

Комбинация клавиш Значение mysql> -> >, , , , Повторный вызов предыдущей строки Повторный вызов следующей строки Перемещение курсора влево (назад) Перемещение курсора вправо (вперед) Перемещение назад на одно слово Перемещение вперед на одно слово Перемещение курсора в начало строки Перемещение курсора в конец строки Удаление символа, выделенного курсором Удаление символа слева от курсора Удаление слова Удаление слова слева от курсора Удаление части строки от курсора до конца строки Отмена последнего изменения Некоторые опции запрещают использование файла журнала. В частности, к таким относятся опции, определяющие неинтерактивное использование mysql, например, Чbatch, Чhtml И Чquick.

Часть IV. Приложения Использование -nysql [options] [db_name] Определение аргумента db_name делает указанную базу данных текущей (базой данных по умолчанию) для данного сеанса работы. Если же этот аргумент не задан, mysql запускается без текущей базы данных и в дальнейшем пользователю придется либо определять ссылки на все таблицы с именем базы данных, либо установить базу данных по умолчанию с помощью оператора USE dbjiame. Стандартные опции, поддерживаемые программой mysql Чcompress Чdebug Чhelp Чhost --password Чpipe Чport Чset-variable Чsilent --version --socket --user --verbose Опции Чsilent и Чverbose можно для усиления эффекта определять несколько раз. Специальные опции mysql Х В, Чbatch. Определяет запуск mysql в пакетном режиме. Результаты выполнения запросов выводятся в специальном формате (каждая запись в отдельной строке, а значения столбцов разделены символами табуляции). Этот формат оказывается исключительно удобным для создания отчетов, переносимых в другие программы, например электронные таблицы. Выводимые результаты выполнения запросов по умолчанию включают первую строку с заголовками столбцов. Для исключения этой строки используется опция Чskip-column-names. Х -Т, Чdebug-info. Выводит отладочную информацию по завершению работы программы. Х -е query, Чexecute=gwery. Выполняет запрос и завершает работу. Текст запроса необходимо заключить в кавычки, чтобы рабочая оболочка не интерпретировала его как несколько аргументов командной строки. Несколько исполняемых запросов следует разделять в строке query с помощью точек с запятыми. Х -f, --force. Обычно при выполнении программой mysql запросов из файла, работа завершается в случае возникновения ошибки. Эта опция заставляет mysql продолжать работу, независимо от появления ошибок. Х -н, Чhtml. Выводит данные в виде кода HTML. Возможность использования этой опции появилась только в MySQL 3.22.26. Приложение Д. Программы MySQL -i, Чignore-space. Указывает серверу пропускать пробелы между названиями функций и символом "(", отражающим начало списка аргументов. Как правило, между названием функции и открывающей круглой скобкой пробелы использовать нельзя. -А, Чno-auto-rehash. В процессе запуска программа mysql упорядочивает названия баз данных, таблиц и столбцов для создания информационной структуры, позволяющей быстро завершать эти названия при вводе пользователем. (Создавая запрос, введите начальную часть уникального названия таблицы или столбца и нажмите клавишу <ТаЬ>. Программа mysql завершит ввод этого имени.) Эта опция отменяет сложный процесс упорядочения, благодаря чему mysql запускается значительно быстрее, особенно если обрабатывается большое число таблиц. Чтобы активизировать возможность завершения имен уже после запуска mysql, можно запустить команду rehash из строки подсказки "mysql>". -о, Чone-database. Эта опция используется для обновлении баз данных на основании содержимого файла журнала обновлений. Она указывает mysql обновить только текущую базу данных (указанную в командной строке). Все обновления других баз данных пропускаются. Если в командной строке не указана какаялибо база данных, обновление не выполняется. -q, Чquick. Обычно mysql перед отображением результирующего набора запроса на экране полностью извлекает этот результат с сервера. Эта опция заставляет программу отображать каждую строку сразу после получения с сервера, что способствует уменьшению загрузки памяти и позволяет успешно выполнить запросы, которые в других условиях могут завершаться с ошибкой. Эту опцию однако не следует определять для интерактивного использования. Если один пользователь временно приостановит работу mysql, сервер будет ждать продолжения, что не замедлит отразиться на работе других клиентов. -г, Чraw. Записывает значения столбцов, не удаляя специальные символы. Эта опция используется вместе с опцией Чbatch. -N, Чskip-column-numbers. Отменяет вывод строки с заголовками столбцов в результирующем наборе запроса. Этого же эффекта можно достичь посредством двойного определения Чsilent. -L, Чskip-line-numbers. He записывает номера строк при возникновении ошибок. -t, Чtable. Выводит результат выполнения запроса в табличном формате: строки разделены вертикальными линиями и выровнены по вертикали. -n, -unbuffered. После каждого запроса очищает буфер, используемый для обмена с сервером.

Часть IV. Приложения -Е, Чvertical. Выводит результирующий набор запроса вертикально. Каждая запись такого набора отображается в виде набора строк. Одна строка соответствует одному столбцу. Строки состоят из названия столбца и значения. Перед каждой записью выводится строка с номером записи внутри результирующего набора. Подобный вертикальный формат отображения может быть полезен в случае, когда длина строк результирующего набора очень велика. Если эта опция не определена, задавать вертикальный формат для отдельных запросов можно посредством завершения их последовательностью "\G" вместо ";

" или "\д". Эта опция впервые появилась в MySQL 3.22.5. -w, --wait. Если подключиться к серверу невозможно, запушенная с этой опцией программа немного ждет и снова пытается установить соединение. Переменные mysqi С помощью опции Чset-variable можно установить значения следующих переменных программы mysql. Х max_allowed_packet. Максимальный размер буфера, используемого для обмена данными между сервером и клиентом. Х net_buf f er_length. Исходный размер буфера, используемого для обмена данными между сервером и клиентом. Команды mysql Помимо отправляемых на сервер MySQL операторов SQL, программа mysql распознает еще несколько своих собственных команд. Каждая такая команда должна задаваться отдельной строкой, в конце которой необязательно ставить точку с запятой. Большинство команд имеют длинную форму, состоящую из полного слова, и короткую форму, состоящую из обратной косой черты и следующей за ним буквой. Регистр символов в командах длинной формы не учитывается. Представленные в короткой форме команды необходимо задавать с учетом определенного ниже регистра. Х clear, \c. Отменяет текущий запрос. Текущим называется запрос, который вводится в командной строке. Следовательно, данная команда не в состоянии отменить запрос, который уже отправлен на сервер и результаты которого выводятся на экран. Х connect [db_name [host_name]], \r [db_name [host_name]]. Подключается к указанной базе данных на определенном компьютере. Если имя базы данных или компьютера не указываются в Приложение Д. Программы MySQL командной строке, вместо них используются последние значения текущего сеанса mysql. edit, \e. Редактирует текущий запрос. Используемый для этих целей редактор определяется значениями переменных EDITOR и VISUAL. Если ни одно из них не установлено, запускается редактор vi. ego, /G. Отправляет текущий запрос на сервер и вертикально выводит его результаты. Эта команда впервые появилась в MySQL 3.22.11. exit. Эта команда аналогична команде quit. go, \g, ;

. Отправляет текущий запрос на сервер и выводит результаты его выполнения. help, \h, ?. Отображает справочную информацию о доступных командах mysql. print, \p. Распечатывает текущий запрос (его текст, а не результаты выполнения). quit, \q. ВЫХОДИТ ИЗ mysql. rehash, \f. Пересчитывает данные, необходимые для автоматического завершения имен баз данных, таблиц и столбцов Более детально об этом средстве рассказывается в описание ОПЦИИ --no-auto-rehash. status, \s. Извлекает и выводит информацию о состоянии сервера. Эта команда весьма полезна для определения версии сервера и текущей базы данных. use db_name, \u db_name. Устанавливает указанную базу данных в качестве текущей.

Сценарий mysql. server mysql. server Ч это сценарий, который запускает сервер mysqld и завершает его работу посредством вызова сценария safe_mysqld. Использование mysql.server start mysql.server stop Как правило, программа mysql.server используется в системах типа System V и инсталлируется в один из подкаталогов запуска каталога /etc. Для запуска сервера система в процессе загрузки вызывает сценарий с аргументом start. Для закрытия сервера этот же сценарий в процессе завершения работы системы вызывается с аргументом stop. Кроме того, эти сценарии можно вызвать и самостоятельно, задав один из указанных аргументов. Часть IV. Приложения Сценарий mysqlaccess Этот сценарий позволяет подключиться к серверу, извлечь информацию о привилегиях доступа и протестировать результаты присвоения привилегий. В процессе своей работы сценарий mysqlaccess использует копии таблиц user, db и host базы данных mysql. (Но этот сценарий нельзя использовать для проверки привилегий доступа к таблицам и столбцам.) Внесенные во временные таблицы изменения можно перенести в таблицы реальных баз данных mysql. Чтобы максимально воспользоваться преимуществами программы mysqlaccess, пользователь должен обладать достаточными привилегиями для доступа к таблицам разрешений.

Использование mysqlaccess [host_name [user_name [ d b _ n a m e ] ] ] options Стандартные опции, поддерживаемые сценарием mysqlaccess Чhost --password --user Чversion Специальные ОПЦИИ mysqlaccess Х -b, Чbrief. Отображает результаты в однострочном формате. Х --commit. Копирует временные таблицы разрешений в базу данных mysql. He забудьте после задания этой опции запустить команду mysqladmin flush-privileges, чтобы сервер "заметил" изменения. Х Чсору. Загружает содержимое таблиц разрешений во временные таблицы. Х -d db_name, Чdb=db_name. Задает имя базы данных. Х Чdebug=л. Устанавливает уровень отладки. Значение п может быть целым числом от 0 до 3. Х Чhowto. Выводит несколько примеров использования программы mysqlaccess. Х --old_server. Определяет, что версия сервера MySQL превышает 3.21. Это заставляет mysqlaccess вносить некоторые изменения в отправляемые на сервер запросы.

Приложение Д. Программы MySQL Х --plan. Отображает список усовершенствований, планируемых в будущих версиях mysglaccess. Х Чpreview. Показывает различия между реальными и временными таблицами разрешений. Х Чrelnotes. Распечатывает замечания версии mysqlaccess. Х -Н host_name, Чrhost=host_name. Определяет удаленный компьютер с сервером, к которому осуществляется подключение. Х --rollback. Отменяет изменения, внесенные во временные таблицы разрешений. ш -р password, Чspassword=password. Определяет пароль для суперпользователя MySQL (пользователя, обладающего достаточными привилегиями для изменения таблиц разрешений). Х -и user_name, Чsuperuser=user_name. Определяет имя суперпользователя MySQL. Х -t, Чtable. Выводит результаты в табличном формате. Программа mysqladmin Утилита mysqladmin предназначена для взаимодействия с сервером MySQL и выполнения административных операций. Ее же можно использовать для получения информации о сервере, управления его функционированием, установки паролей, а также создания или удаления баз данных.

Использование mysqladmin [options] command...

Стандартные опции, поддерживаемые УТИЛИТОЙ mysqladmin --compress Чdebug --help --host --password --pipe --port --silent --socket --user --version Опция Чsilent заставляет mysqladmin "тихо" завершить работу в случае невозможности подключения к серверу. Специальные ОПЦИИ mysqadmin Х -f, Чforce. Эта опция имеет две особенности. Во-первых, она указывает программе mysqladmin не запрашивать подтверждение для команды drop db_name. Во-вторых, если в командной строке 690 Часть IV. Приложения задано несколько команд, mysqladmin попытается обязательно все их выполнить, даже если в процессе этого выполнения возникает ошибка В обычных условиях утилита mysqladmin завершает работу сразу при появлении первой ошибки. Ч relative. Отражает разницу между текущим и предыдущим значениями при задании вместе с опцией --sleep В настоящее время эта опция работает только с командой extended-status. -i n, --sleep=n. Выполняет заданные в командной строке команды повторно с интервалом п секунд между повторениями. -t n, Чtimeout=л. Ожидает и секунд перед попыткой подключения к серверу. Эта опция впервые появилась в MySQL 3.22.1. -w [ n ], Чwait [л]. Определяет число попыток повторного подключения к серверу в случае невозможности установления соединения. Если значение п не определено, оно по умолчанию устанавливается равным 1. Команды mysqladmin Пользователи этой программы имеют возможность задать в одной строке одну или несколько описанных далее команд с последующими опциями. Имя команды может быть уменьшено до префикса, если таковой является уникальным. Например, имя processlist можно укоротить до префикса process или ргос, но не до префикса р. Некоторые из приведенных ниже команд имеют аналоги среди операторов SQL (о чем упоминается в описаниях). Более детально о значениях операторов SQL рассказывается в приложении Г, "Синтаксис SQL". Х create db_name. Создает новую базу данных с заданным именем. Эта команда аналогична SQL-оператору CREATE DATABASE db_name. Х drop db_name Удаляет базу данных с заданным именем и все содержащиеся в ней таблицы. Эту команду следует использовать с большой осторожностью, поскольку ее результаты нельзя отменить. Как правило, если не задана опция Чforce, программа mysqlaccess запрашивает подтверждение перед выполнением команды drop. Эта команда аналогична SQL-оператору DROP DATABASE db_name. Х extended -status. Выводит имена и значения переменных состояния сервера. Эта команда аналогична SQL-оператору SHOW STATUS. Команда extended-status впервые появилась в MySQL 3.22.10. Х flush-hosts. Обновляет кэш главного компьютера. Эта команда аналогична SQL-оператору FLUSH HOSTS. Приложение Д. Программы MySQL flush-logs. Обновляет (закрывает и заново открывает) файлы журналов. Эта команда аналогична SQL-оператору FLUSH LOGS, flush-privileges. Повторно загружает таблицы разрешений. Эта команда аналогична SQL-оператору FLUSH PRIVILEGES. flush-status. Очищает переменные состояния. (Сбрасывает некоторые счетчики до нуля.) Эта команда аналогична SQL-оператору FLUSH STATUS. flush-tables. Обновляет кэш таблиц. Эта команда аналогична SQL-оператору FLUSH TABLES. kill id, id,.... Завершает работу определенных с помощью идентификаторов потоков. При определении нескольких номеров между ними нельзя оставлять пробелы, чтобы не "запутать" следующую за kill команду. Для определения работающих в настоящее время потоков можно воспользоваться командой mysqladmin processlist. Эта команда подобна запуску SQL-оператора KILL для каждого идентификатора. password new_password Изменяет пароль new_password для пользователя MySQL, который подключается к серверу после запуска команды mysqladmin. Изменяющий пароль пользователь должен иметь возможность подключиться к серверу MySQL от имени пользователя, чей пароль изменяется. Это будет служить лучшим подтверждением того, что старый пароль также знаком администратору. Эта команда аналогична SQL-оператору SET PASSWORD. Команда password впервые появилась в MySQL 3.22. ping. Проверяет, работает ли сервер MySQL. processlist. Отображает список выполняемых в настоящее время потоков сервера. Эта команда аналогична SQL-оператору SHOW PROCESSLIST. refresh. Обновляет кэш таблиц, а также закрывает и снова открывает файлы журналов. reload. Повторно загружает таблицы разрешений. Эта команда аналогична SQL-оператору FLUSH PRIVILEGES. shutdown. Указывает серверу завершить работу. status. Выводит короткое сообщение о состоянии сервера. variables. Выводит имена и значения переменных сервера. Эта команда аналогична SQL-оператору SHOW VARIABLES. version. Извлекает и отображает строку с информацией о версии сервера.

Часть IV. Приложения Программа mysqlbug В одной из глав справочного руководства по MySQL детально описывается процедура заполнения отчета об ошибках. Воспользовавшись приведенными рекомендациями, вы будете уверены, что создание отчета окажется эффективным, а его содержимого будет достаточно для устранения проблемы. Основная часть описанной процедуры связана с использованием сценария mysqlbug. Именно эта программа применяется для создания и отправки отчета об ошибках в почтовый список MySQL. Сценарий mysqlbug собирает информацию о рабочей системе и конфигурации MySQL, после чего открывает перед пользователем окно редактора с содержимым отсылаемого сообщения. Добавьте в это сообщение всю информацию, которую считаете нужным сообщить, сохраните изменения и закройте редактор. Программа mysqlbug предложит отправить созданное сообщение и в случае подтверждения отправит его. Настоятельно рекомендуется использовать mysqlbug только в случае действительно серьезных проблем. Довольно часто предполагаемая "ошибка" вовсе таковой не является и уже давно описана в справочном руководстве по MySQL Так, например, довольно часто к ошибкам относят возвращение оператором DELETE FROM tbl_name нулевого значения. Действительно так зачастую бывает, но это нормальное "поведение" оператора В справочном руководстве указывается, как подсчитать число удаленных строк, а также предоставляется много другой полезной информации. Другим не менее ценным источником информации является список рассылки MySQL. Подключиться к нему можно по следующему адресу:

Использование mysqlbug [address] Отчет об ошибках по умолчанию отправляется в почтовый список MySQL. Если определить в командной строке другой адрес, то именно по нему будет отправлен отчет. Можно определить свой собственный адрес, чтобы просто проверить работу mysqlbug. Это действительно неплохая идея для тех, кто использует программу mysqlbug впервые и плохо знаком с принципами ее работы. Программа mysqld Программа mysqld является сервером MySQL, который обеспечивает клиентским программам доступ к базам данных. Следовательно, эта программа должна постоянно работать, иначе клиенты не смогут получить доступ к управляемым сервером базам данных. Сразу после запуска Приложение Д. Программы MySQL утилита mysqld открывает сетевые порты и ожидает запросы на установление соединений от клиентов. Программа mysqld является многопотоковой и обрабатывает каждое клиентское соединение в отдельном потоке, что обеспечивает согласованность работы между различными клиентами. Запросы на запись в базу данных выполняются одновременно. Когда сервер начинает исполнять такой запрос, он не приступит ни к одному другому запросу, связанному с этой же базой данных, пока не завершит текущий. Именно это не позволяет двум клиентам одновременно изменить одну строку таблицы. Использование mysqld [options] Стандартные опции, поддерживаемые программой mysqld Чdebug Чhelp --port --socket --user --version Обратите внимание, что несмотря на поддержку опции -socket не поддерживается ее короткая форма -S, потому что сервер использует опцию -Sg, значение которой никак не связано с файлом разъема. Опция Чuser (если таковая задается) определяет имя пользователя, учетная запись которого будет применяться для запуска сервера. При подобном запуске сервер просматривает ID-значения пользователя и группы учетной записи в файле паролей и затем соответствующим образом их изменяет. В итоге сервер работает с полномочиями заданного пользователя, а не пользователя root. (Для достижения наибольшей эффективности работы необходимо запустить сервер с помощью учетной записи пользователя root.) Эта опция впервые появилась в MySQL 3.22. Специальные опции mysqld Х -b pathjiame, Чbasediz=path_name. Определяет путь к каталогу инсталляции MySQL. Если впоследствии в процессе работы сервера задаются относительные пути, то они начинаются с определенного здесь каталога. Х Чbig-tables. Позволяет обрабатывать большие результирующие наборы за счет сохранения всех временных результатов на диске, а не в памяти. Это позволяет избежать появления сообщений о "заполнении таблиц", которые возникают из-за недостатка памяти. Эта опция необходима только для версий, предшествующих MySQL 3.23.

Часть IV. Приложения Чbind-address=/p_aWr Привязывается к заданному IP-адресу. Обычно программа mysqld привязывается к IP-адресу, по умолчанию установленному для компьютера, на котором запущен сервер. С помощью этой опции можно выбрать альтернативный адрес, если используемый компьютер имеет несколько адресов. Чbootstrap. Эта опция используется инсталляционными сценариями в процессе первой инсталляции MySQL. Ч chroot=path_name. Запускает сервер MySQL, связанный со специальным корневым каталогом. Этой опцией задается путь к этому каталогу. Более детально о работе в среде chroot () рассказывается в разделе справочного руководства по UNIX, посвященном chroot (). Эта опция впервые появилась в MySQL 3.22.2. -h path_name, Чdatadir=path_name. Определяет путь к каталогу данных MySQL. Чdefault-table-type=fy/>e. Устанавливает формат хранения таблиц по умолчанию. В качестве аргумента type могут выступать значения isam, myisam или heap. (Регистр символов при их написании не учитывается.) Если данная опция не задана, по умолчанию используется формат My IS AM. Эта опция впервые появилась в MySQL 3.23. Чenable-locking. Активизирует внешнюю блокировку (блокировку файловой системы) для таких систем, как LINUX, где по умолчанию установлена опция Чskip-locking. Эта опция впервые появилась в MySQL 3.22.4. -т [ п ], Чexit-info [ = n ]. Выводит информацию отладки по завершении работы программы. Эта опция впервые появилась в MySQL 3.22. --init-file=file_name. Определяет файл с операторами SQL, выполняемый в процессе запуска. -L, --lanquage=lang_name. Определяет язык для выводимых сообщений об ошибках. Обычно в качестве аргумента lang_name выступает значение english. -1 [pathjiame}, Чlog [=path_name]. Активизирует регистрацию в файл общего журнала. Этот журнал содержит информацию о клиентских соединениях и запросах. Если путь pathjiame не задан, для записи журнала по умолчанию используется файл host_name.log, где hostjiame Ч имя компьютера с сервером. Если путь pathjiame задан как относительный, он определяется, начиная с каталога данных. Ч log-isam[=y?/e_nflme]. Активизирует регистрацию в файл индексов, которая необходима только для операций отладки таблиц ISAM/MylSAM.

Приложение Д. Программы MySQL Ч log-long-format. Записывает дополнительную информацию в журнал обновлений. Эта опция впервые появилась в MySQL 3.22.7. Ч log-update [^pathjiame]. Активизирует регистрацию в файл журнала обновлений. Журнал обновлений содержит текст всех запросов на изменение таблиц баз данных. Если путь path_name не задан, для записи журнала по умолчанию используется файл host_name. ппп, где host_name Ч имя компьютера с сервером, а ппп Ч последовательный номер, на единицу больший используемого в предыдущем файле журнала обновлений. Если же путь path_name задан с именем файла без расширения, сервер добавляет числовое расширение в форме описанной ранее последовательности. Определенное вместе с расширением имя файла используется все время без изменений. Если путь path_name задан как относительный, он определяется, начиная с каталога данных. Ч low-priority-updates. Устанавливает для операций записи меньший приоритет, чем для операций выборки. Эта опция впервые появилась в MySQL 3.23. (В версиях MySQL 3.22.5Ч3.23 эта опция называлась Чlow-priority-inserts.) -n, Чnew. Использует новый, возможно, небезопасный шаблон. Эта возможность MySQL является весьма новой и не обьяаченной официально, поэтому ее следует применять с большой осторожностью. -о, Чold-protocol. Использует протокол, который применялся для взаимодействия между сервером и клиентами в версиях MySQL, предшествующих 3.21. Эта опция может потребоваться только при взаимодействии сервера с очень старыми клиентскими программами. Чone-thread. Запускается с одним потоком. Подобный запуск используется для отладки под LINUX, которая обычно управляет по крайней мере тремя потоками. Эта опция впервые появилась в MySQL 3.22.2. Чpid-file=path_name. В процессе запуска сервер mysqld записывает идентификатор своего процесса (PID Ч process ID) в файл, а эта опция определяет путь к данному РШ-файлу. Впоследствии этот файл может использоваться другими процессами для определения номера процесса сервера, как правило, с целью отправки сигнала. Так, например, сценарий mysql. server считывает такой РЮ-файл, если необходимо отправить серверу CHI нал о завершении работы. --safe^mcde. Эта опция аналогична опции Чskip-new, однако отключает еще большее число возможностей. Ее можно использовать в тех случаях, когда MySQL работает нестабильно или запуск сложных запросов приводит к выводу некорректных результатов.

lUllilili Часть IV. Приложения Если применение этой опции положительно отражается на работе сервера, упомяните этот факт при описании проблемы в отчете mysqlbug. Х -Sg, Чskip-grant-tables. Отменяет использование таблиц разрешений для проверки клиентских соединений. В результате любой клиент может получить доступ ко всем данным. Чтобы снова указать серверу использовать таблицы разрешений, запустите команду mysqladmin flush-privileges. Х Чskip-host-cache. Отключает кэширование таблиц. Х Чskip-locking. Отменяет внешнюю блокировку (блокировку файловой системы). Если эта опция задана, перед запуском утилит isamchk и myisamchk для отладки таблиц необходимо завершить работу сервера, иначе возникает большой риск их повреждения. Х Чskip-name-resolve. Отменяет попытки разрешения имен компьютеров. Если эта опция задана, в таблицах разрешений компьютеры должны задаваться либо посредством IP-адреса, либо словом localhost. Х Чskip-networking. Запрещает установление ТСР/1Р-соединений. В результате клиенты смогут подключаться к серверу с локального компьютера, указывая имя localhost. Х Чskip-new. Запрещает использовать новые, возможно, небезопасные шаблоны. См. описание опции Чnew. Х Чskip-show-database. He позволяет пользователям запускать запросы SHOW DATABASES или SHOW TABLES к базам данных, к которым эти пользователи не имеют прав доступа. Эта опция впервые появилась в MySQL 3.23. п Чskip-thread-priority. Как правило, запросы на изменение таблиц обладают большим приоритетом, чем запросы выборки данных. Эта опция позволяет уровнять приоритет запросов разного вида. Х -t pathname, Чtmpdir=path_name. Определяет путь к каталогу, используемому для хранения временных файлов. Эта опция впервые появилась в MySQL 3.22.4. Помимо определенных ранее, существуют также опции, относящиеся только к работающим под управлением Windows серверам. Х --console. Отображает окно консоли для сообщений об ошибках. Эта опция впервые появилась в MySQL 3.22.4. Х --flush. Записывает все таблицы на диск после каждого обновления, что снижает риск повреждения таблиц в результате системного сбоя, но и значительно снижает производительность работы. Эта опция впервые появилась в MySQL 3.22.9. Приложение Д. Программы MySQL Ч install. Инсталлирует сервер mysqld-nt в виде службы (относится только к Windows NT). --remove. Удаляет сервер mysqld-nt как службу (относится только к Windows NT). Ч standalone. Запускает сервер mysqld-nt в виде отдельной программы, а не службы (относится только к Windows NT). Переменные mysqid Для просмотра используемых по умолчанию значений переменных mysqid можно воспользоваться командой: % mysqid --help Чтобы узнать, какие значения использует работающий в настоящее время сервер mysqid, запустите команду: % mysqladmin variables Текущие значения переменных можно также проверить и с помощью запроса SHOW VARIABLES. С помощью опции Чset-variables можно установить значения следующих переменных mysqid. Х backlog. Число ожидающих запросов на установление соединения, которые могут размещаться в очереди при обслуживании текущих соединений. ш connect_timeout. Время (в секундах), в течение которого mysqid ожидает входящие пакеты в процессе установления соединения. Х delayed_insert_timeout. Когда механизм вставки строк INSERT DELAYED завершает вставку всех размещенных в очереди строк, он ожидает несколько секунд, чтобы проверить, не получены ли новые строки INSERT DELAYED. Если такие строки имеются, они соответствующим образом обрабатываются. В любом другом случае работа механизма завершается. Х delayed_insert_limit. Число строк оператора INSERT DELAYED, которые будут вставлены в таблицу перед проверкой, поступили ли новые операторы SELECT для таблицы. Если хотя бы один такой оператор имеется, операция вставки временно прекращается для выполнения процедуры выборки данных. Х delayed_queue_size. Число строк оператора INSERT DELAYED, которые могут размещаться в очереди. Если эта очередь заполняется, все последующие операторы INSERT DELAYED блокируются до освобождения места.

Часть IV. Приложения f lush_time. Если эта переменная имеет ненулевое значение, таблицы закрываются для записи внесенных изменений на диск каждые flush_time секунд. Для работающих под управлением Windows систем эта переменная по умолчанию равна 30 минутам. Чтобы изменить ее значение, воспользуйтесь опцией Ч f l u s h. join_buffer_size. Размер буфера полных объединений (т.е. буфера, используемого для объединений, выполняемых без индексов). key_buffer_size. Размер буфера, используемого для блоков индексов. Этот буфер совместно используется потоками различных соединений. В версиях MySQL, предшествующих 3.23, эта переменная имела название key_buffer. long_query_time. Число секунд, определяющих "медленный" запрос. Выполнение запроса больше заданного этой переменной времени сопровождается увеличением на единицу значения счетчика Slow_queries. max_allowed_packet. Максимальный размер буфера, используемого для обмена данными между сервером и клиентом. Первоначально этот буфер имеет размер net_buf fer_length байт, однако в случае необходимости может увеличиваться до max_allowed_packet байт. max_connections. Максимально допустимое число одновременных клиентских соединений. max_connect_errors. Число неудачных попыток соединения с главным компьютером, по достижении которого этот компьютер блокирует все дальнейшие попытки. Это необходимо для защиты от пользователей, пытающихся взломать защиту компьютера. Для очистки кэша компьютера можно воспользоваться оператором FLUSH HOSTS ИЛИ командой mysqladmin flush-hosts. max_delayed_insert_threads. Максимальное число механизмов обработки, вызываемых для выполнения операторов INSERT DELAYED. Любой такой оператор, полученный в момент использования максимально допустимого числа механизмов, не будет рассматриваться как оператор DELAYED. max_join_size. Средство оптимизации MySQL рассчитывает, сколько строк будет возвращено после объединения. Если полученный в результате этой оценки результат больше значения max_join_size, возвращается сообщение об ошибке. Эту переменную можно применять для защиты от пользователей, которые часто запускают беспорядочные запросы SELECT, возвращающие огромное число строк. max_sort_length. Значения типа BLOB и TEXT сортируются по первым max_sortlength байтам каждого значения. Приложение Д. Программы MySQL Х net_buffer_length. Исходный размер буфера, используемого для обмена данными между сервером и клиентом. Впоследствии этот буфер можно увеличить до размера в max_allowed_packet байт. Х record_buffer. Размер буфера, используемого потоками при последовательном сканировании таблиц. Х sort_buffer. Размер буфера, используемого потоками при выполнении операций сортировки (GROUP BY или ORDER BY). Заданное значение определяет размер буфера для каждого потока. Если на сервере выполняется одновременно сортировка большого числа потоков, не рекомендуется устанавливать значение этой переменной очень большим (больше 1 Мбайта). Х table_cache. Максимальное число открытых таблиц. Этот кэш совместно используется всеми потоками. Х tmp_table_size. Максимальный размер временных таблиц (в байтах). Если размеры созданной таблицы превышают это значение, сервер mysqld выдает клиенту сообщение об ошибке. Х thread_stack. Размер стека для каждого потока. Х wait_timeout. Время в секундах, в течение которого сервер поддерживает неиспользуемое соединение перед его закрытием.

Программа mysqldump Утилита mysqldump записывает содержимое таблиц баз данных в текстовые файлы. Впоследствии такие файлы можно использовать в самых разных целях, например, для резервирования баз данных, переноса их на другой сервер или создания тестовой базы данных на основании содержимого уже существующей базы. По умолчанию созданный текстовый файл состоит из оператора CREATE TABLE, который воссоздает таблицу, и набора операторов INSERT, восстанавливающих ее содержимое. При задании опции --tab содержимое таблицы записывается в файл данных в "сыром" формате, а SQL-оператор создания таблицы записывается в отдельный файл. Использование mysqldump [options] dbjiame [tbl_name] Если после определения базы данных dbjiame не приводится ни одного имени таблицы, в файл записывается содержимое всех таблиц указанной базы данных. В любом другом случае резервируется содержимое только заданных таблиц. Наиболее часто утилита mysqldump используется следующим образом:

% mysqldump --opt db_name > backap_flie Часть IV. Приложения Стандартные опции, поддерживаемые программой mysqldump Чcompress Чdebug --help --host --password --pipe --port Чset-variable --socket Чuser Чverbose Чversion Специальные опции mysqldump Описанные ниже опции управляют функционированием программы mysqldump. В следующем разделе "Опции форматирования данных" будут представлены опции, которые вместе с опцией Чtab могут использоваться для представления формата файлов данных. Х Чadd-drop-table. Добавляет оператор DROP TABLE IF EXISTS перед каждым оператором CREATE TABLE. Х Чadd-locks. Добавляет операторы LOCK TABLE и UNLOCK TABLE до и после набора операторов INSERT, загружающих данные в каждую таблицу. Х Чallow-keywords. Позволяет создавать имена столбцов, которые являются ключевыми словами. Х -с, Чcomplete-insert. Использует операторы INSERT для указания имен всех вставляемых столбцов. Х --delayed-insert. Записывает операторы INSERT DELAYED. Х -е, Чextended-insert. Записывает операторы INSERT, вставляющие несколько строк. Х -F, Чflush-logs. Обновляет регистрационные файлы сервера перед запуском процесса резервирования. Х -f, Чforce. Продолжает работу даже при возникновении ошибки. Х Чfull. Добавляет в создаваемые программой mysqldump операторы CREATE TABLE дополнительную информацию, такую как тип столбца, исходное значение AOTO_INCREMENT и т.п. Именно эта информация определяется в предложении table_options синтаксиса оператора CREATE TABLE (см. приложение Г, "Синтаксис SQL"). Х -1, --lock-tables. Устанавливает блокировку на все таблицы перед их резервированием. Х -t, Чno-create-info. He записывает операторы CREATE TABLE. Х -d, Чno-data. He записывает данные таблицы. Х Чopt. Оптимизирует скорость резервирования таблицы и создает новый файл таким образом, чтобы ускорить процесс восстановления. Эта опция включает опции Чadd-drop-table, Чadd-locks, --all, --extended-insert, --quick и --lock-tables. Приложение Д. Программы MySQL Х -q, Чquick. По умолчанию утилита mysqldump считывает все содержимое таблицы в память, а затем уже из памяти записывает его в файл. Эта опция заставляет программу записывать каждую строку на диск сразу после получения с сервера. При использовании этой опции ни в коем случае нельзя приостанавливать работу программы mysqldump. Ведь сервер будет ожидать возобновления ее работы, что не замедлит отразиться на работе других клиентов. Х -т dumpjdir, --tab=dump_dir. Эта опция заставляет программу mysqldump записывать по два файла для каждой таблицы, размещая их в каталоге dump_dir. Указанный каталог должен уже существовать. Для каждой таблицы (Ы_пате создается файл dump_dir/table_name.txt, в который заносятся данные таблицы, и dump_dir/table_name.sql, в который записывается оператор CREATE TABLE. Для задания этой опции пользователь должен обладать привилегией FILE. Во избежание недоразумений программу mysqldump с этой опцией лучше запускать непосредственно на сервере. Иначе одни файлы могут записаться на диск сервера, а другие Ч на диск клиента. Это объясняется тем, что файлы с расширением SQL сохраняются в каталоге dump_dir на компьютере сервера, а файлы с расширением ТХТ Ч на компьютере клиента. В результате владельцем SQL-файлов окажется пользователь, учетная запись которого применяется для запуска сервера, а владельцем ТХТ-файлов станет пользователь-клиент. Значения столбцов в файле данных по умолчанию разделяются символами табуляции, а строки завершаются символом перехода на новую строку. Используя описанные в разделе "Опции форматирования данных", опции этот формат можно изменить. Х -W where_clause, --where=where_clause. При задании этой опции извлекаются и записываются в файлы данных только записи, определенные предложением \vhere_clause. Это предложение следует заключить в кавычки, чтобы оболочка не интерпретировала его как аргументы строки с несколькими командами. Данная опция впервые появилась в MySQL 3.22.7. Опции форматирования данных Определив опцию --tab или -т с целью создания отдельного файла данных для каждой таблицы, можно задать дополнительные опции формата. Значения этих опций, возможно, придется заключить в кавычки Описанные далее опции аналогичны опциям формата данных, используемых в операторе LOAD DATA. Для получения более детальной информации см. приложение Г, "Синтаксис SQL".

Часть IV. Приложения т Ч fields-enclosed-by=c/wr Определяет, что значения столбцов необходимо заключить в заданный символ, как правило, кавычки. По умолчанию значения столбцов не заключаются в символы. Ч f ields-escaped-by=c/2flr. Определяет управляющий символ для специальных символов. По умолчанию такой символ отсутствует. Ч fields-optionally-enclosed-by=c/!ar. Определяет, что значения столбцов могут заключаться в заданный символ, обычно это кавычки. Такой символ применяется для нечисловых столбцов. По умолчанию значения столбцов не заключаются в кавычки. Ч fields-terminated-by=cAar Определяет символ разделения значений столбцов в файле данных. По умолчанию для разделения значений применяется символ табуляции. Ч lines-terminated-by=5?r Определяет строку (которая может состоять из нескольких символов), записываемую в конце выводимых строк. По умолчанию в качестве такой строки выступает символ перехода на новую строку. Переменные mysqldump С помощью опции Чset-variables можно установить значения следующих переменных mysqldump. Х max_allowed_packet. Максимальный размер буфера, используемого для обмена данными между сервером и клиентом. Х net_buf f er_length. Исходный размер буфера, используемого для обмена данными между сервером и клиентом. Впоследствии этот буфер можно увеличить до размера в max_allowed_packet байт. Программа mysqlimport Утилита mysqlimport применяется для считывания содержимого текстовых файлов и загрузки его в существующие таблицы. Она функционирует как интерфейс командной строки для SQL-оператора LOAD DATA и является весьма эффективным способом вставки строк в таблицы. Использование mysqlimport [options] db_name file_name... Аргумент dbjiame определяет базу данных, в таблицы которой будут Добавлены значения. Собственно таблицы определяются именами текстовых файлов. В имени каждого файла удаляется расширение, а основа используется в качестве названия таблицы, в которую загружаются данПриложение Д. Программы MySQL ные файла. Например, программа mysqlimport загрузит содержимое файла president.txt в таблицу president. Стандартные опции, поддерживаемые утилитой mysqlimport --compress --debug Чhelp --host --password --pipe --port Чsilent --socket Чuser Чverbose --version Специальные опции mysqlimport Описанные ниже опции определяют, как программа mysqlimport обрабатывает файлы с данными. В следующем разделе, "Опции форма тирования данных", описываются опции, определяющие формат пред ставления данных в текстовых файлах. Х -d, Чdelete. Очищает каждую таблицу перед загрузкой в Het данных. Х -f, Чforce. Продолжает загрузку строк даже при появлент ошибки. Х -i, Чignore. Если вставляемая строка содержит уже сущест вующее значение уникального ключа, эта опция оставляет сущест вующую строку и отбрасывает добавляемую. Х -L, Чlocal. Утилита mysqlimport по умолчанию разрешае! серверу считать файл данных. Это означает, что файл данных должен размещаться на компьютере сервера, а работающий с программой пользователь должен обладать привилегией FILE. Опция Ч local указывает программе mysqlimport считать файл на локальном компьютере и отправить его на сервер. Это замедляет работу, но позволяет запускать утилиту mysqlimport на компьютере клиента или компьютере сервера, не обладая привилегией FILE. Опция Чlocal впервые появилась в MySQL 3.22.15. Х -1, Чlock-tables. Устанавливает блокировку на все таблицы перед загрузкой в них данных. Х -г, Чreplace. Если добавляемая в таблицу строка содержит дублирующее значение уникального ключа, эта опция заменяет строку таблицы добавляемой строкой. Опции форматирования данных Программа mysqlimport по умолчанию предполагает, что значения файла данных разделены символами табуляции, а строки завершаются символами перехода на новую строку. Ожидаемый формат можно изменять 704 Часть IV. Приложения с помощью описанных ниже опций. Значения этих опций, возможно, придется заключить в кавычки. Описанные далее опции аналогичны опциям формата данных, используемым в операторе LOAD DATA. Для получения более детальной информации см. приложение Г, "Синтаксис SQL". Х Чfields-enclosed-by=c/7fl/-. Определяет, что значения столбцов заключаются в заданный символ, как правило, кавычки. По умолчанию значения столбцов не заключаются в символы. Х Чf ields-escaped-by=c/7#r. Определяет управляющий символ для специальных символов. По умолчанию такой символ отсутствует. Х --fields-optionally-enclosed-by=c/?ar. Определяет, что значения столбцов могут заключаться в заданный символ, обычно это кавычки. Х Чfields-terminated-by=c/iar. Определяет символ разделения значений столбцов в файле данных. По умолчанию предполагается, что значения столбцов разделяются символом табуляции. Х Чlines-terminated-by=sfr. Определяет строку (которая может состоять из нескольких символов), записываемую в конце строк вывода. По умолчанию предполагается, что в качестве такой строки выступает символ перехода на новую строку.

Программа mysqlshow Утилита mysqlshow создает список баз данных, таблицы внутри баз данных, а также предоставляет информацию о столбцах и индексах таблиц. Эта программа является своего рода интерфейсом командной строки SQL-оператора SHOW. Использование mysqlshow [options] [db_name [tbl_name [coljname] } ] Если имя базы данных db_name не определено, программа mysqlshow выводит список всех баз данных, размещенных на компьютере сервера. Если задано имя базы данных, но отсутствует название таблицы, выводится список всех таблиц заданной базы данных. Если же указываются имена базы данных и таблицы, но отсутствуют названия столбцов, выводится список всех столбцов заданной таблицы. Если же определены все три названия, программа mysqlshow отображает информацию о заданном столбце. Если последний аргумент включает символ шаблона оболочки ("*" или "?"), выводимые данные ограничиваются значениями, соответствующими этим шаблонам. Символы "*" и "?" используются как SQLсимволы "%" и "_" для оператора LIKE. Приложение Д. Программы MySQL 23-1729 Стандартные опции, поддерживаемые программой mysqlshow --compress Чdebug --help Чhost --password --pipe --port --socket --user Чversion Специальные опции mysqlshow Х -i, --status. Выводит информацию такого же вида, что и оператор SHOW TABLE STATUS. Опция Чstatus впервые появилась в MySQL 3.23. Х -k, Чkeys. Помимо информации о столбцах таблицы, отображает также информацию о ее индексах. Эта опция "вступает в силу" только при определении имени таблицы.

Программа safejnysqld Программа safe_mysqld представляет собой сценарий, который запускает сервер mysqld и следит за его работой. Если по какой-либо причине сервер прерывает свою работу, то сценарий safe_mysqld перезапускает его. Использование Сценарий safe_mysqld использует те же опции, что и программа mysqld.

Часть IV. Приложения II Е Программный интерфейс приложений С В этом приложении описывается программный интерфейс приложений языка С, используемый клиентской библиотекой MySQL. Программный интерфейс приложений (application programming interface Ч API) состоит из набора функций, предназначенных для взаимодействия с серверами и базами данных MySQL, а также набора используемых этими функциями типов данных. Это приложение следует рассматривать как справочное руководство с небольшими фрагментами кода, иллюстрирующими примеры использования клиентской библиотеки. Полное описание клиентских программ и замечания по их написанию можно найти в главе 6, "Программный интерфейс MySQL С API."

Приложение Е. Программный интерфейс приложений С 23 Компилирование и редактирование связей На исходном уровне клиентская библиотека определяется файлом заголовка mysql. h, который может включаться в состав исходных файлов: #include Чтобы указать компилятору месторасположение этого файла, воспользуйтесь опцией -I/path/to /include Idir. Если файлы заголовка MySQL инсталлированы, например, в каталог / u s r / i n c l u d e / m y s q l или / u s r / l o c a l / m y s q l / i n c l u d e, исходные файлы можно откомпилировать с помощью следующих команд:

% gcc -I/usr/include/mysql -с myprog.c % gcc -I/usr/local/mysql/include -с myprog.c Другие файлы заголовков MySQL можно найти в том же каталоге, чт<. и файл m y s q l. h. Файл mysql_com.h, например, содержит константы i макросы, используемые для интерпретации результирующих метаданньг запроса. (Этот файл входит в состав файла mysql. h, поэтому, чтобы про смотреть его содержимое, достаточно включить файл mysql.h.) Фашь errmsg.h и m y s q l d _ e r r o r. h содержат константы кодов ошибок. На уровне объектов клиентская библиотека предоставляется как биб лиотека mysqlclient. При редактировании связей определите в команд! связывания опцию -Imysqlclient. Возможно, также придется с помо шью опции -L/path/to/lib/dir указать редактору связей местораспо ложение библиотеки:

% gcc -о myprog myprog.o -L/usr/lib/mysql -Imysqlclient % gcc -о myprog myprog.o -L/usr/local/mysql/lib -Imysqlclient Типы данных программного интерфейса приложений С Типы данных клиентской библиотеки MySQL предназначены для представления объектов, которые обрабатываются на протяжении сеанса работы с сервером. Существуют отдельные типы данных для соединения, результатов запроса, строк результирующего набора и метаданных (описательная информация о столбцах результирующего набора). Заметьте, что в последующем материале понятия "столбец" и "поле" являются синонимами.

Часть IV. Приложения Скалярные типы данных Скалярные типы данных MySQL представляют большие целочисленные и булевы значения, а также смещения полей. Х my_ulonglong. Тип длинного целого числа, который используется для значений, возвращаемых такими функциями, как mysqlaffected_ rows (), mysql_num_rows() и mysql_insert_id(). Эти функции возвращают либо значения счетчиков строк, либо другие потенциально большие числа. Для вывода значения my_longlong необходимо преобразовать его в unsigned long и воспользоваться форматом "%lu", иначе в некоторых системах это значение будет выведено неправильно. Х my_bool. Булев тип, используемый для значений, возвращаемых функциями mysql_change_user() И mysql_eof(}. Х MYSQL_FIELD_OFFSET. Этот тип данных используется функциями mysql_field_tell О И mysql_f ield_seek () ДЛЯ представления смещения внутри набора структур MYSQL_FIELD текущего результирующего набора. Нескалярные типы данных Нескалярными типами данных MySQL являются структуры и массивы. Каждую структуру MYSQL или MYSQL_RES следует рассматривать как, своего рода, "черный ящик". Это означает, что ссылаться можно только на всю структуру сразу, но не на отдельные ее элементы, хотя типы MYSQL_ROW и MYSQL _FIELD подобных ограничений не имеют. Поэтому доступ к ним можно получать открыто для считывания данных и метаданных, возвращаемых в виде результирующего набора запроса. Х MYSQL. Основной тип клиентской библиотеки Ч структура MySQL, используемая механизмом обработки соединений. Этот механизм содержит информацию о состоянии соединения с сервером. Пользователь создает структуру MySQL, после чего передает ее программе соединения для открытия сеанса работы с сервером. После установления соединения механизм можно использовать для посылки запросов, генерирования результирующих наборов, получения сообщений об ошибках и других операций. Х MYSQL_RES. Запросы, которые возвращают клиенту запрашиваемые данные, например, SELECT и SHOW, манипулируют в процессе своей работы результирующим набором, представленным в виде структуры MYSQL_RES. Эта структура содержит информацию о возвращаемых запросом строках.

Приложение Е. Программный интерфейс приложений С После считывания результирующего набора пользователь получает возможность вызывать функции интерфейса API для получения данных результирующего набора (значения строк набора) или метаданных (информации о результирующем наборе, например, количество столбцов, их типы, длины и т.п.). Х MYSQL_ROW. Тип MYSQL_ROW содержит значения одной строки данных, представленной в виде массива строк определенного размера. В строковой форме функциями возвращаются все значения, даже числовые. Единственное исключение составляют строковые значения NULL, которые представляются в структуре MYSQL_ROW Cуказателем NULL Число значений в строке определяется функцией mysql_num f i e l d s (). Значение 1-го столбца в строке задается элементом r o w [ i ], где 1 может изменяться в пределах от 0 до mysql_ num_f ields (res_set) -1. (res_set Ч это указатель на результирующий Набор MYSQL_RES.) Заметьте, что тип MYSQL_ROW уже является указателем, поэтому переменную строки можно описывать следующим образом: MYSQL_ROW row;

/* правильно */ Нельзя описывать ее так: MYSQL_ROW *row;

/* неправильно */ Значения типа MYSQL_ROW всегда заканчиваются нулями, поэтому недвоичные значения могут рассматриваться как заканчивающиеся нулем строки. Однако информационные значения с двоичными данными также могут включать нули, поэтому должны обрабатываться как строки определенной длины. Для определения длин значений строки воспользуйтесь функцией mysql_f etch_lengths (): unsigned long *length;

length = mysql_fetch_length ( r e s _ s e t ) ;

Для значений NULL эта функция возвращает длину 0. Х MYSQL_FIELD. Клиентская библиотека использует структуры MYSQL_FIELD для предоставления метаданных о столбцах результирующего набора (по одной структуре на каждый столбец). Количество структур MYSQL_FIELD определяет функция mysql_num_ f i e l d s О. Пользователь может получать доступ к структурам полей посредством вызова функции m y s q l _ f e t c h _ f i e l d ( ) или перемещаться вперед и назад по структурам с помощью функций mysql_field_tellО и m y s q l _ f i e l d _ s e e k ( ). Структура MYSQL_FIELD исключительно полезна для представления или интерпретации содержимого строк данных. Она имеет следующий вид: typedef struct st_mysql_field ( 710 Часть IV. Приложения char *name;

char *table;

char *def;

enum enum_field_types type;

unsigned int length;

unsigned int max_length;

unsigned int flags;

unsigned int decimals;

} MYSQL_FIELD;

Элементы структуры MYSQL_FIELD имеют следующие значения. Х name. Имя столбца, представленное в виде строки, завершающейся символом NULL. Если значения столбцов рассчитываются как результаты выражений, имя name представляет собой это выражение в строковой форме. Если столбец или выражение заданы в качестве псевдонима, имя name является именем псевдонима. Результатом выполнения следующего запроса, например, станут значения name столбцов "mycol", "4* (my_col+l)" и "тс": SELECT my_col, 4* (mycol+l), my_col AS тс... Х table. Имя таблицы, столбец которой считывается, представленное в виде строки, завершающейся символом NULL. Если значения столбца рассчитываются как результаты выражений, table представляет собой пустую строку. Например, если запустить запрос, аналогичный следующему, имя таблицы для первого столбца (my_col) будет равно my_tbl, а для второго (my_col+0) окажется пустой строкой: SELECT my_col, my_col+0 FROM my_tbl... Х d e f. Значение по умолчанию для столбца, представленное в форме строки, завершающейся символом NULL. Этот элемент структуры MYSQL_FIELD устанавливается только посредством вызова функции mysql_list_fields О. Во всех остальных случаях он имеет значение NULL. (Чтобы получить значения столбцов по умолчанию, можно запустить запрос DESCRIBE tbljiame или SHOW FIELDS FROM tbljiame и исследовать результирующий набор.) Х type. Тип столбца. Тип столбца определяется как результат выражения и устанавливается в зависимости от типов элементов этого выражения. Так, например, если столбец my_col имеет тип VARCHAR(20), элемент type будет иметь значение FIELD_TYPE_VAR_STRING, а ТИП type ДЛЯ столбца ТИПЗ LENGTH(my_col) будет FIELD_TYPE_LONGLONG. Возможные значения элемента type представлены в файле mysql_com.h и описываются в табл. ЕЛ. Приложение Е. Программный интерфейс приложений С Таблица Е. 1. Значения элемента type структуры MYSQL FIELD Значение type FIELDJTYPE BLOB FIELDJTYPE_DATE FIELDJTYPE_DATETIME FIELDJTYPE _DECIMAL FIELD TYPE_DOUBLE FIELD TYPE ENUM FIELD TYPE FLOAT FIELD TYPE INT24 FIELD TYPE_LONG FIELD TYPE LONGLONG FIELD TYPE NULL FIELD_TYPE_SET FIELDJTYPE_SHORT FIELDJTYPE _STRING FIELDJTYPE _TIME FIELD_TYPE_TIMESTAMP FIELD_TYPE_TINY FIELD_TYPE_VAR_STRING FIELD_TYPE_YEAR Тип столбца BLOB ИЛИ TEXT DATE DATETIME DECIMAL ИЛИ NUMERIC DOUBLE ИЛИ REAL ENUM FLOAT MEDIUMINT INT BIGINT NULL SET SMALLINT CHAR TIME TIMESTAMP TINYINT VARCHAR YEAR В исходных файлах более старых версий можно найти ссылки на тип FIELD_TYPE_CHAR. Это однобайтовый тип, который в современных версиях имеет название FIELD_TYPE_TINY. length. Длина столбца в соответствии с параметрами оператора CREATE TABLE, с помощью которого была создана таблица. Длина столбца рассчитывается на основании выражения и определяется длинами элементов выражения. max_length. Длина самого длинного значения столбца, реально присутствующего в результирующем наборе. Если столбец, например, содержит значения "Bill", "Jack" и "Belvidere", значение max_length для него будет равно 9. Поскольку значение max_length можно определить только после вывода всех строк, оно отвечает действительности Часть IV. Приложения только для результирующих наборов, созданных функцией mysql_store_result (). Для наборов, созданных функцией m y s q l _ u s e _ r e s u l t (), значение max_length равно 0. Х f l a g s. Элемент f l a g s определяет атрибуты столбца. Каждый отдельный атрибут представлен собственным разрядом внутри значения flags. Значения разрядов могут проверяться с помощью констант разрядной маски, представленной в табл. Е.2. Чтобы определить, являются или нет значения столбца беззнаковыми (UNSIGNED), достаточно проверить значение flags следующим образом: if ( f i e l d - > f l a g s & UNSIGNED_FLAG) print ("%s values are UNSIGNED\n", field->name Таблица Е.2. Значения элемента flags структуры MYSQL_FIELD Значение flags AUTO_INCREMENT_FLAG BINARY_FLAG MULTIPLE_KEY_FLAG NOT_NULL_FLAG PRI_KEY_FLAG ONIQUE_KEY_FLAG UNSIGNED_FLAG ZEROFILL_FLAG Назначение Столбец имеет атрибут AUTO_INCREMENT Столбец ИМевТ атрибут BINARY Столбец ЯВЛЯвТСЯ ЧЗСТЬЮ ИНДвКСЗ NON_UNIQUE Столбец не может содержать значения NULL Столбец является частью PRIMARY KEY Столбец является частью индекса UNIQUE Столбец имеет атрибут UNSIGNED Столбец имеет атрибут ZEROFILL Х Некоторые константы flags отражают типы столбца, а не его атрибуты. В настоящее время они исключены, поэтому для определения типа столбца необходимо использовать запись field->type. Исключенные из MySQL константы описаны в табл. Е.З. Таблица Е.З. Исключенные значения элемента flags структуры MYSQL_FIELD Значение flags BLOB_FLAG ENUM_FLAG SET_FLAG TIMESTAMP_FLAG Назначение Столбец содержит значения типа BLOB Столбец содержит значения типа ENUM Столбец содержит значения типа ЗЕТ Столбец содержит значения типа TIMESTAMP Приложение Е. Программный интерфейс приложений С decimals. Число десятичных знаков для столбцов числового типа. Для не числовых столбцов это значение равно нулю. Так, например, столбец DECIMAL ( 8, 3 ) имеет значение decimals равное 3, а столбец типа BLOB Ч 0. Макросы доступа Файл mysql.h содержит несколько макросов, которые позволяют легко исследовать значения элементов структуры MYSQLFIELD. Макрос IS_NUM{) проверяет элемент type, а остальные описанные здесь макросы исследуют элемент flags. Макрос is_NUM() возвращает значение "True" (не равен нулю), если значения столбцов имеют числовой тип:

if (IS_NUM (field->type)) printf ("Field %s is numeric\n", field->name);

Макрос IS_PRI_KEY() возвращает значение "True", если столбец яв ляется частью первичного ключа:

if (IS_PRI_KEY (field->flags)) printf ("Field %s is part of primary key\n", field->name);

Макрос IS_NOT_NULL возвращает значение "True", если столбец не может содержать значения NULL:

if (IS_NOT_NULL (field->flags)) printf ("Field %s values cannot be NULL\n", field->name);

Функции программного интерфейса приложений С Функции клиентской библиотеки можно классифицировать по следующим категориям. Х Функции управления соединением, используемые для установления и разрыва соединений с сервером. Х Функции состояния и отчетов об ошибках, используемые для получения кодов ошибок и сообщений о них. Х Функции создания и выполнения запросов, используемые для ввода запросов и отправки их на сервер. Х Функции обработки результирующих наборов, используемые для обработки результатов, возвращающих данные запросов. Х Информационные функции, обеспечивающие данные о клиенте, сервере, номере версии используемого протокола и текущем соединении. 714 Часть IV. Приложения Х Административные функции, управляющие функционированием сервера. т Функции отладки, используемые для вывода информации отладки. Х Исключенные функции, которые в настоящее время не применяются. В последующих разделах функции клиентской библиотеки каждой указанной категории описываются более детально и перечисляются в алфавитном порядке. Некоторые параметры постоянно появляются в описаниях функций и имеют стандартное значение. Х conn Ч указатель на механизм обработки соединения с сервером MySQL. Х Х м res_set Ч указатель MYSQL_RES. f i e l d Ч указатель MYSQL_FIELD. на структуру на структуру результирующего информации о набора столбцах row Ч строка данных MYSQLJROW из результирующего набора.

Для краткости изложения представленные значения этих параметров можно использовать в последующих описаниях функций. Все приведенные функции присутствуют в клиентской библиотеке в версии MySQL 3.21.0 и выше, если другое не указано. Функции управления соединением Эти функции применяются для установления и разрыва соединений с сервером, установки опций, влияющих на способ установления соединения, и восстановления временно приостановленных соединений. Х my_bool mysql_change_user (MYSQL *conn, char *user_name, char *password, char *db_name);

Изменяет имя пользователя и базу данных по умолчанию для определенного указателем conn соединения. Эта база данных становится базой по умолчанию для ссылок на таблицы, в которых спецификатор базы данных не определен Если аргумент db_name равен NULL, база данных по умолчанию не устанавливается. Функция mysql_change_user () возвращает значение "True", если пользователю разрешено подключение к серверу и он обладает достаточными полномочиями для доступа к указанной базе. В любом другом случае функция завершается с ошибкой, а текущий пользователь и база данных остаются неизменными. I I Функция mysql_change_user () впервые появилась в MySQL 3 23 3 Х void mysql_close (MYSQL *conn) Закрывает соединение, определенное указателем conn. Эту программу рекомендуется вызывать по завершении сеанса работы с Зиложение Е. Программный интерфейс приложений С сервером. Если механизм обработки соединения автоматически назначается функцией mysql_init (), функция mysql_close () освобождает его. Не следует вызывать функцию mysql_close (), если попытка установки соединения оказалась неудачной. Х MYSQL * mysql_init (MYSQL *conn) Инициализирует механизм обработки соединения и возвращает указатель на него. Если аргумент conn указывает на уже существующую структуру MYSQL, функция mysql_init инициализирует этот механизм и возвращает его адрес: MYSQL conn_struct, *conn conn = mysql_init (&conn_struct);

Если значение conn равно NULL, функция mysql_init О назначает новый механизм, инициализирует его и возвращает адрес: MYSQL *conn conn = mysql_init(NULL) В случае безуспешного завершения функция mysql_init() возвра щает значение NULL. Это может произойти в том случае, когд;

функция mysql_init () не в состоянии назначить новый механизм. Если функция mysqlinit () определяет новый механизм, то npi закрытии соединения функция mysql_close () освобождает еп автоматически. Функция mysql_init () впервые появилась в MySQL 3.22.1. Х int mysql_options (MYSQL *conn, enum mysql_optic: option, char * a r g ) ;

Эта функция позволяет управлять состоянием соединения более точно, чем с помощью одной функции mysql_real_connect (). Вызовите ее по завершении работы функции mysql_init () и перед запуском mysql_real_connect (). Для установки нескольких опций функцию mysql_options (} можно вызывать несколько раз. Аргумент option определяет устанавливаемую опцию соединения. Дополнительная информация об опции, если таковая имеется, задается с помощью аргумента arg. (Обратите внимание, arg Ч это указатель.) Если дополнительная информация не нужна, аргумент arg устанавливается равным NULL. Для задания этой опции можно использовать следующие опции. Х MYSQL_INIT_COMMAND Определяет запрос, выполняемый сразу после подключения к серверу. Собственно запрос задается в аргументе arg в виде строки, завершающейся значением NULLЭтот же запрос выполняется и после восстановления соединения (например, при вызове функции mysql_ping ( ) ). Все воз716 Часть IV. Приложения вращаемые этим запросом данные пропускаются.

результирующего набора Х MYSQL_OPT_COMPRESS. Определяет, что в соединении при обмене данными между сервером и клиентом должен использоваться протокол сжатия, если сервер, конечно, его поддерживает. Аргумент arg имеет значение NULL. Определить сжатие можно также mysql_real_connect(). и при вызове функции Х MYSQL_OPT_CONNECT_TIMEOUT. Задает небольшой временной перерыв в соединении (в секундах). Аргумент arg указывает на число unsigned int, определяющее длительность перерыва. Х MYSQL_OPT_NAMED_PIPE. Определяет, что соединение с сервером должно устанавливаться через именованный канал. Аргумент arg имеет значение NULL. Эта опция предназначена только для клиентов Windows 95/98/NT и используется только при установлении соединения с серверами Windows NT. Х MYSQL_READ_DEFAULT_FILE. Определяет Конфигурационный файл, содержащий параметры соединения. Считываемые функцией опции размещаются в группе [client] файла. Х MYSQL_READ_DEFAULT_GROUP. Определяет считываемую группу из конфигурационного файла, заданного опцией MYSQL_ READ_DEFAULT_FILE. ОПЦИИ ЭТОЙ ГруППЫ считываются В ДОПОЛнение к опциям группы [client]. Если при этом конфигурационный файл не задан, клиентская библиотека ищет стандартные конфигурационные файлы и считывает их содержимое. Если для установки определенной опции функция mysqloptions () вызывается несколько раз, функция mysql_real_connect () использует для нее значение, установленное последним. В случае успешной установки опции функция mysql options () возвращает ноль. Если значение опции не установлено (неизвестно), возвращается ненулевое значение. В конфигурационном файле можно задавать следующие опции (либо в группе [ c l i e n t ], либо в определенной опцией MYSQL_READ_DEFAULT_GROUP Группе): compress database=db_name debug host=host_name ini t-command=query password=your_password pipe port=port_nura i Приложение Е. Программный интерфейс приложений С return-found-rows socketsocket_name timeout=seconds user=user_name В приведенном ниже примере функция mysql_options() вызывается для установки таких значений опций соединения, чтобы функция mysql_read_connect () пыталась установить соединение через именованный канал с помощью протокола сжатия и временного перерыва в 10 секунд. Эти параметры считываются из групп [client] и [mygroup] файла C:\my.cnf.special. Сразу после установления соединения ВЫПОЛНЯеТСЯ оператор SET SQL_BIG_TABLES. MYSQL *conn unsigned int timeout;

if ((conn = mysql_init (NULL) == NULL)... обработка ошибок... timeout = 10;

mysql_options (conn, MYSQL_OPT_CONNECT_TIMEOUT, (char *) stimeout);

mysql_options (conn, MYSQL_OPT_CQMPRESS, NULL);

mysql_options (conn, MYSQL_OPT_NAMED_PIPE, NULL);

mysql_optlons (conn, MYSQL_READ_DEFAULT_FILE, "C:\my.cnf.special");

mysql_options (conn, MYSQL_READ_DEFAULT_GROUP, "mygroup");

mysql_options (conn, MYSQL_INIT_COMMAND, "SET SQL_BIG_TABLES=1");

if (mysql_real_connect (conn,...) == NULL)... обработка ошибок...

Функция mysql_options () впервые появилась в MySQL 3.22.1. ОПЦИИ MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE И MYSQL_READ_DEFAULT_GROUP впервые появились в MySQL 3.22.10. int mysql_ping (MYSQL *conn) ;

Проверяет, находится ли еще определенное указателем conn соединение в активном состоянии. Если соединение оборвано, функция mysql_ping() восстанавливает его с теми же параметрами, которые используются при установлении исходного соединения. Соответственно, не следует вызывать функцию mysql_ping (), если предыдущее соединение не было успешно установлено функцией mysql_real_connect (). Функция mysql_ping () впервые появилась в MySQL 3.22.1. MYSQL * mysql_real_cormect (MYSQL *conn, char *host_name, char *user_name, char *password, char *db_name, unsigned int port_num, char *socket_name, unsigned int f l a g s ) ;

Часть IV. Приложения Подключается к серверу и возвращает указатель на дескриптор соединения. Аргумент conn должен быть указателем на существующий механизм обработки соединений, инициализированный функцией mysql_init (). Адрес дескриптора возвращается при успешном установлении соединения. Если в процессе подключения возникла ошибка, функция возвращает значение NULL. Чтобы в случае неудачной попытки установления соединения получить информацию об ошибке, можно задать значение дескриптора conn функциям mysql_errno() и mysql_error (). Не следует однако задавать значение conn другим программам клиентской библиотеки, которые предполагают успешное установление соединения. Аргумент host_name определяет имя сервера, к которому выполняется подключение. В табл. Е.4 показано, какое соединение пытается установить клиент при различных значениях аргумента host_name в Windows и UNIX. (Если соединение устанавливается через разъем UNIX или именованный канал, имя разъема или канала определяются параметром socket_name.) Таблица Е.4. Типы клиентских соединений, определяемые типом имен компьютера сервера Значение имени компьютера имя компьютера IP-номер localhost Тип соединения UNIX Тип соединения Windows TCP/IP-соединение с указан- TCP/IP-соединение с указанным компьютером ным компьютером TCP/IP-соединение с указан- TCP/IP-соединение с указанным компьютером ным компьютером Соединение с локальным ком- TCP/IP-соединение с локальпьютером через разъем UNIX ным компьютером Не применяется Соединение с локальным компьютером через именованный канал TCP/IP-соединение с локальным компьютером. В Windows NT перед установлением этого соединения выполняется попытка установления соединения через именованный канал NULL Соединение с локальным компьютером через разъем UNIX Имя пользователя MySQL задается аргументом user_name. Если он имеет значение NULL, клиентская библиотека отправляет установленное по умолчанию имя. В работающих под управлением UNIX системах именем по умолчанию является регистрационное Приложение Е. Программный интерфейс приложений С имя, а работающих под Windows Ч имя, определенное переменной среды USER (если она установлена), либо ODBC. Аргумент password устанавливает пароль. Если он имеет значение NULL, пользователь сможет подключиться только в том случае, если таблица разрешений будет содержать запись с его именем, компьютером, с которого осуществляется подключение, и пустым полем пароля. Используемая рабочая база задается аргументом db_name. Если он имеет значение NULL, исходная база данных не выбирается. Аргумент port_num определяет номер порта, используемого для установления TCP/IP-соединения. Если этот аргумент имеет значение 0, выбирается установленный по умолчанию номер порта. Номер порта и имя разъема выбираются в соответствии со значением host_name. Если подключение к серверу выполняется с локального компьютера, функция mysql_real_connect () пытается установить соединение с помощью разъема домена UNIX (при работе под управлением UNIX) или именованного канала (при работе под управлением Windows). Во всех остальных случаях соединение устанавливается с помощью протокола TCP/IP. Аргумент flags может иметь значение 0, отражающее полное отсутствие опций, или одно (или несколько) значение из табл. Е.5 Устанавливаемые в нем опции воздействуют на функционирование сервера. Таблица Е.5. Значение аргумента flags для функции mysql_real_connect() Значение флага Воздействие на функционирование сервера CLIENT_FOUND_ROWS Запросы UPDATE возвращают число соответствующих условиям строк, а не число измененных строк CLIENT_NO_SCHEMA CLIENT_COMPRESS CLIENTJDDBC Запрещает использовать схему db_name.tbl_name.col_name Использует протокол сжатия, если его поддерживает сервер Работает с клиентом как с ODBC-клиентом Если задана опция CLIENT_NO_SCHEMA, сервер позволяет ссы латься на объекты в запросах только с помощью синтаксиса tbl_name.col_name, tbl_name или col_name. Значения флагов являются разрядными, что позволяет их комбинировать с помощью символов "1" или 'Ч", например. CLIENT COMPRESS|CLIENT ODBC ИЛИ CLIENT COMPRESS+CLIENT ODBC 720 Часть IV. Приложения J Функция mysql_real_connect () впервые появилась в MySQL 3.21.10. Параметр db_name был добавлен в версии 3.22.0. Применение функции mysql_init() для инициализации аргументов MySQL берет свое начало в версии 3.22.1. Функции состояния и диагностики ошибок Описанные в этом разделе функции применяются для определения причин возникновения ошибок и создания отчетов о них. ш unsigned int mysql_errno (MYSQL *conn);

Возвращает код ошибки для последней вызываемой программы клиентской библиотеки, возвращающей значение состояния. Так, код ошибки 0 указывает на отсутствие ошибки. Все остальные значения кода указывают на наличие ошибок. Возможные коды ошибок описаны в файлах заголовков MySQL, errmsg.h и mysql_error.h. if (mysql_errno (conn) == 0) printf ("Все в п о р я д к е Х п " ) ;

else printf ("Что-то н е п р а в и л ь н о ! \ n " ) ;

Функция mysql_errno () впервые появилась в MySQL 3.21.7. Х char * mysql_error (MYSQL *conn) Возвращает строку, завершающуюся значением NULL, содержащую сообщение об ошибке последней вызываемой программы клиентской библиотеки, возвращающей значение состояния. Если ошибка отсутствует, эта функция возвращает пустую строку (строку с нулевой длинной, но не указатель NULL). Хотя обычно функция mysql_error (} вызывается уже после появления ошибки, возвращаемое ею значение можно использовать для проверки наличия или отсутствия ошибки в работе: if (mysql_error ( c o n n ) [ 0 ] == \0) /* пустая строка? */ printf ("Все в п о р я д к е Х п " ) ;

else printf ("Что-то н е п р а в и л ь н о ! \ п " ) ;

Функция mysql_error () впервые появилась в MySQL 3.21.7 (возможно, даже чуть позже). Функции создания и выполнения запросов Описанные в этом разделе функции используются для отсылки запроSCOB на сервер. Функция mysql_escape_string () позволяет создать заjtipoc с помощью специальных символов, имеющих особое значение. ;

Приложение Е. Программный интерфейс приложений С I ;

Х unsigned int mysql_escape_string (char *to_str, char *from_str, unsigned int from_len) Преобразует заданную строку, которая может содержать специальные символы, что позволяет использовать эту строку в качестве оператора SQL. Допустимые специальные символы, а также их кодировки представлены в табл. Е.6. Таблица Е.6. Кодировка специальных символов функции mysql_escape_string() Специальный символ NULL (ASCII 0) Кодировка \0 (обратная косая черта+"0", но не обратная косая черта и ноль) V (обратная косая черта Ч одинарная кавычка) V (обратная косая черта Ч двойные кавычки) \п (обратная косая черта Ч "п") \г (обратная косая черта Ч "г") \Z (обратная косая черта Ч "Z") Обратная косая черта \\ (обратная косая черта Ч обратная косая черта) Одинарная кавычка Двойные кавычки Переход на новую строку Возврат каретки Кодируемый буфер задается как строка определенной длины. На этот буфер указывает аргумент f rom_str, а число разрядов в нем задается аргументом from_len. Функция mysql_escape_string() записывает результат в буфер, определенный аргументом to_str, n добавляет нулевой разряд. Аргумент to_str должен указывать на существующий буфер длиной не менее (from_len*2)+l байт. (В наихудшем случае для кодирования каждого символа буфера f rom_str может потребоваться двухсимвольная последовательность, а также место для завершающего символа NULL.) Функция mysql_escape_string() возвращает длину закодированной строки без учета завершающего нулевого байта. Результирующая закодированная строка не содержит внутренних нулей, однако завершается NULL, что позволяет использовать ее с такими функциями, как strlen() или strcat (). Записывая буквенную строку в программу, следует проявлять осторожность, чтобы полученная в результате кодирования функцией mysql_escape_string() строка не была ошибочно воспринята из-за лексикографических соглашений языка программирования С. Рассмотрим, например, следующую строку и выводимый результат функции:

Часть IV. Приложения to_len = mysql_escape_string (to_str, "\0\\\\"\n\r\032", 7);

printf ("to_len = %d, to_str = %s\n", to_len, to_str) Результатом этого кода станет следующая строка:

to_len = 14, to_str = \0\\\\"\n\r\Z Выведенное в буфер to_str значение очень похоже на строку второго аргумента функции mysql_escape_string(), однако в действительности отличается от него. int mysql_query (MYSQL *conn, char *query_string);

Считывая запрос, представленный в виде строки, завершающейся NULL, функция mysql_query () отправляет его на сервер для выполнения. Заданная строка запроса не должна включать двоичные данные, в частности, пустые байты, которые интерпретируются функцией mysql_query (} как завершение строки запроса. Если запрос все же включает двоичные данные, для его выполнения следует воспользоваться функцией mysql_real_query (). Запрос может включать только один оператор SQL и не должен завершаться точкой с запятой (";

") или последовательностью "\д". (Эти последовательности распознаются клиентской программой mysql, но не клиентской библиотекой.) Функция mysql_query () возвращает ноль в случае успешного выполнения запроса и ненулевое значение при возникновении ошибки. Успешным считается запрос, который сервер принял как допустимый и выполнил без ошибок. Успех не зависит от числа обработанных или возвращенных строк. int mysql_real_query (MYSQL *conn, char *query_string, unsigned int length);

Считывая запрос, представленный в виде строки фиксированной длины, функция mysql_real_query () отправляет его на сервер для выполнения. Строка запроса может содержать двоичные данные (включая пустые байты). Его текст определяется указателем query_string, а длина задается аргументом length. Запрос может включать только один оператор SQL и не должен завершаться точкой с запятой (";

") или последовательностью "\д". (Эти последовательности распознаются клиентской программой mysql, но не клиентской библиотекой.) Функция mysql_real_query () возвращает ноль в случае успешного выполнения запроса и ненулевое значение при возникновении ошибки. Успешным считается запрос, который сервер принял как допустимый и выполнил без ошибок. Успех не зависит от числа обработанных или возвращенных строк. int mysql select db (MYSQL *conn, char *db name);

Приложение Е. Программный интерфейс приложений С Устанавливает базу данных, заданную аргументом db_name, как текущую. Эта база впоследствии используется по умолчанию для всех ссылок на таблицы, определенные без спецификатора базы данных. Применяющий эту функцию пользователь должен обладать полномочиями на доступ к базе данных, иначе функция mysql_select_db {) не завершит успешно свою работу. Функция mysql_select_db () возвращает ноль в случае успешного выполнения и ненулевое значение при возникновении ошибки. Функции обработки результирующих наборов После создания запросом результирующего набора специальные функции, описанию которых и посвящен этот раздел, позволяют произвести выборку этого результата и получить к нему доступ. Создают результирующий набор функции mysql_store_result () И mysql_use_result (), поэтому одну из них необходимо обязательно вызвать перед использованием описанных далее функций. Сравнение функций mysql_store_result О и mysql_use_result () представлено в табл. Е.7. Таблица Е.7. Сравнение функций mysql_store_result () И mysql_use_result() Функция mysql store result () Все строки из результирующего набора выбираются собственно функцией mysql_store_result() Требует больше памяти, поскольку все строки хранятся в памяти компьютераклиента Работает медленней из-за переполнения, связанного с выделением памяти для всего результирующего набора Возвращаемое функцией mysqlfetch_row() значение NULL указывает на завершение результирующего набора и не используется для отображения ошибки Функция mysl use result () Функция mysql_use_result() инициализирует результирующий набор, а выборка строк выполняется функцией mysql_f etch_row () Использует меньше памяти, поскольку записывается по одной строке Работает быстрее, поскольку память необходимо выделять для хранения только текущей строки Возвращаемое функцией mysql_fetch_row() значение NULL указывает на завершение результирующего набора или наличие ошибки, поскольку сбой при обмене данными может привести к остановке операции выборки записей Функция mysql_num_rows () может ВЫ- Функция mysqlnum_rows () воззываться в любой момент после вызова вратит правильное число строк функции mysql_store_result() только после выборки всех строк Часть IV. Приложения Окончание табл Е. 7 Функция mysql store result () Функция mysql_affected_rows () является аналогом функции mysql num_rows() Случайный доступ к результирующему набору возможен с помощью функций mysql_data_seek(), mysql_row_ seek (} и mysql_row_tell () Функция mysl_ase_result () Функцию mysql_af f ected_rows {} нельзя использовать Случайный доступ к результирующему набору невозможен. Строки могут обрабатываться только в порядке, возвращаемом с сервера. Функции mysql_data s e e k ( ), mysql_row_ seek () и mysql_row_tell () не используются Функцию mysql_fetch_row (} не нужно Для выборки строки обязательно нужно вызывать функцию вызывать вовсе, поскольку все строки mysql_fetch_row(), иначе очень уже и так извлекаются для клиента длинные строки перейдут на результаты следующего запроса, вызвав ошибку "рассинхронизации" Доступ к таблицам блокируется только на период времени, необходимый для выборки строк данных Таблицы могут оставаться заблокированными, если клиент временно приостановит выборку Это не позволит другим клиентам получить доступ к этим таблицам Значение элемента roax_length () не имеет никакого смысла, поскольку оно неизвестно до момента завершения полной выборки строк Элемент max_length () структур MYSQL_FIELD результирующего набора устанавливается равным длине наибольшего значения для столбца набора int mysql_affected_rows (MYSQL *conn) Возвращает число строк, измененных последним запросом DELETE, INSERT, REPLACE ИЛИ UPDATE. Эту фуНКЦИЮ ДЛЯ Подобных запросов можно вызывать сразу после успешного вызова функции mysql_quer>(). Можно также вызвать функцию mysql_affected_ rows () после выполнения оператора, возвращающего строки. В этом случае эта функция работает так же, как и функция mysql_ num_rows () и подвержена таким же ограничениям. Кроме того, существует еще одно ограничение и заключается оно в том, что возвращенное функцией mysql_affected_rows () значение не будет иметь смысла, если для выборки результата использовалась функция mysql_use_result(). Функция mysql_affected_rows () возвращает ноль, если ни один запрос не был отправлен, либо был выполнен запрос, возвращающий строки, но ни одна из них выбрана не была. Если возвращенПриложение Е. Программный интерфейс приложений С ное значение больше нуля, оно отражает число измененных (дл Запросов DELETE, INSERT, REPLACE И UPDATE) ИЛИ возвращенных (для запросов, возвращающих данные) строк. Возвращенное значение -1 указывает на наличие ошибки или запуск функции mysql_af f ected_rows () после выполнения запроса, возвращающего строки, но до реальной выборки результирующего набора. Поскольку возвращаемое этой функцией значение не имеет знака, его сравнение можно выполнить посредством преобразования результата в значение со знаком: if ( ( l o n g ) mysql_affected_rows (conn) == -1) fprint (strderr, " E r r o r ! \ n " ) ;

Если пользователь определяет, что программа должна возвратит! число строк, отвечающих условиям запроса UPDATE, функцш mysql_affected_rows () возвращает именно это значение, а т число реально измененных строк. (MySQL не обновляет строку если изменяемые столбцы включают значения, аналогичные новым.) Для выбора этого варианта необходимо либо определить опцию return_found_rows в конфигурационном файле, либо задать В параметре f l a g s функции mysql_real_connect () опцик CLIENT_FOUND_ROWS. Более детальную информацию о выводе значений тип? my_ulonglong можно найти в разделе "Скалярные типы данных". void mysql_data_seek (MYSQL_RES *res_set, unsigned in T offset) ;

~ ~ Находит нужную строку в результирующем наборе. Значение аргумента offset может задаваться в диапазоне от 0 до mysql_num rows (res_set) -1. Если это значение выходит за пределы данного диапазона, возвращаемый результат окажется непредсказуемым. Для работы функции mysql_data_seek() необходимо, чтобы результирующий набор был выбран полностью. Поэтому данную функцию можно использовать только в том случае, если результирующий набор создан функцией mysql_store_result (), но не функцией mysql_use_result (). MYSQL_FIELD * mysql_fetch_field (MYSQL_RES *res_set);

Возвращает структуру с информацией (метаданными) о столбце результирующего набора. При первом вызове функции mysql_ fetch_field() после успешного выполнения запроса, возвращающего строки, возвращается информация о первом столбце. При каждом последующем вызове возвращается информация о последующих столбцах или значение NULL, если больше столбцов не осталось. Для определения позиции текущего столбца можно вызвать функцию mysql_field_tell (). Чтобы выбрать отдельный столбец, информация о котором будет возвращена при следующем вызове Часть IV. Приложения функции mysql_fetch_field(), mysql_f ield_seek ( ).

воспользуйтесь функцией В следующем примере отыскивается первая структура MYSQL_FIELD, a затем извлекаются все последующие структуры с информацией о столбцах:

MYSQL_FIELD * field;

unsigned int i;

mysql_field_seek (res_set, 0) ;

for (i = 0;

i < mysql_num_fields (res_set);

{ field = mysql_fetch_field (:qes_set) printf ("column %u: name = %s max_length = %lu\n", i, field->name, field->max_length) ;

} MYSQL_FIELD * mysql_fetch_f ields (MYSQL_RES res_set) ;

Возвращает массив всех структур с информацией о столбцах результирующего набора. Доступ к ним можно получить следующим образом:

MYSQL_FIELD * field;

unsigned int i;

field = mysql_fetch_f ields (res_set) ;

for (i = 0;

i < mysql_num_.fields (res_set) ;

i++) ;

{ printf ("column %u: name = %s max_length = %lu\n", i, field[i].name, field[i].max_length) ;

} Сравните этот код с примером, приведенным в описании функции m y s q l _ f e t c h _ f i e l d ( ). Обратите внимание на то, что хотя обе функции возвращают значения одинакового типа, доступ к таким значениям осуществляется с помощью разного синтаксиса. MYSQL_FIELD * mysql_fetch_f ield_direct (MYSQL_RES *res_ set, unsigned int field_num) ;

Считывая индекс столбца, возвращает для него информационную структуру. Значение аргумента f ield_num может задаваться в диапазоне от 0 до mysql_num_fields () -1. Если это значение выходит за пределы данного диапазона, возвращаемый результат окажется непредсказуемым. Как получать прямой доступ к структурам MYSQL_FIELD, показано в следующем примере:

MYSQL_FIELD * field;

unsigned int i;

for (i =0;

i < mysql_num_fields (res_set);

{ field = mysql_fetch_field_direct (res_set, i) ;

Приложение Е. Программный интерфейс приложений С printf ("column %u: name = %s max_length = %lu\n", i, field->name, field->max_length);

Функция mysql_fetch_field_direct О не работает в версия\ MySQL, предшествующих серии 3.23. unsigned long * mysql_fetch_lengths (MYSQL_RES *res_set);

Возвращает указатель на массив значений unsigned long, представляющих длины столбцов в текущей строке результирующего набора. Функцию mysql_fetch_lengths () необходимо вызывать при каждом вызове функции mysql_fetch_row(), иначе длины столбцов не будут синхронизированы с их значениями. Для значений NULL длина равна нулю, однако нулевая длина сама по себе не является обязательным фактом наличия значения NULL. Поскольку длина пустой строки также равна нулю, пользователь еще должен проверить, является ли заданное значение столбца указателем NULL. В следующем примере выводятся длины столбцов и значения текущей строки, причем на месте значения NULL выводится строка "NULL": unsigned long *length;

length = mysql_fetch_length (res_set);

for (i = 0;

i < mysql_num_fields (res_set);

printf ("length is %lu, value is %s\n", length[i], (row[i] != NULL ? row[i] "NULL")) Функция mysql_fetch_lengthsО впервые появилась в MySQL 3.20.5. В версиях MySQL, предшествующих 3.22.7, возвращаемое ею значение имело тип unsigned int. MYSQL_ROW mysql_fetch_row (MYSQL_RES *res_set);

Возвращает указатель на следующую строку результирующего набора, представленного в виде массива строк (лишь значения столбцов NULL представляются в виде указателей на NULL). 1-е значение строки является i-м элементом массива значений. Значения всех типов данных, в том числе и числовых, представлены в виде строк. Поэтому перед выполнением какой-либо числовой операции над значением необходимо сначала его преобразовать, например, с помощью функции atoi () или atof (). Если в результирующем наборе не остается строк, функция mysql_f etch_row () возвращает значение NULL. (Если для инициализации построчной выборки результирующего набора используется функция mysql_use_result (), функция mysql_fetch_row() возвращает значение NULL еще и в случае возникновения ошибки при связи.) Часть IV. Приложения Информационные значения заканчиваются нулями, однако значения с двоичными данными следует обрабатывать не как строки, завершающиеся значением NULL, а как строки фиксированной длины. (Для определения длины значения столбца воспользуйтесь функцией mysql_f etch_length ( ).) В следующем примере показано, как организовать просмотр строк со значениями данных и определить, какие из значений равны NULL: MYSQL_ROW row;

unsigned int i;

while ( ( r o w = raysql_fetch_row (res_set)) != NULL) ( for (i =0;

i < mysql_num_fields (res_set) ;

i++) { printf ("column %u: value is %s\n", i, (row[i] == NULL ? "NULL" : "not NULL,"));

Для определения типов значений столбцов можно использовать метаданные столбцов, записанные в информационных структурах столбцов MYSQL_FIELD. Как отмечалось ранее, доступ к ним можно получить с помощью функций m y s q l _ f e t c h _ f i e l d ( ), mysql_fetch_f ields () или mysql_f ield_direct (). Х unsigned int mysql_field_count (MYSQL *conn) Возвращает число столбцов для последнего запроса заданного соединения. Эта функция обычно используется в тех случаях, когда функции mysql_store_result () или mysql_use_result () возвращают значение NULL. Функция mysql_field_count () позволяет определить, должен ли возвращаться результирующий набор. Возвращаемое ею значение 0 отражает отсутствие результирующего набора, а соответственно и отсутствие ошибки. Ненулевое значение показывает, что столбцы ожидаются и, поскольку они отсутствуют, имеет место ошибка. В следующем примере показано, как использовать функцию mysql_field_count () для определения наличия ошибок:

res_set = mysql_store_result (conn);

if (res_set == NULL) /* результирующий набор не был возвращен */ { /* * Объясняется ли отсутствие результирующего * набора ошибкой, либо набор вовсе не должен возвращаться? */ if (mysql_field_count (conn) > 0) { /* * результирующий набор ожидался, но функция mysql store result!) ~ -~ litRaC Приложение Е. Программный интерфейс приложений С else { результирующий набор не ожидался;

запрос не возвратил данные (это не был запрос SELECT, SHOW, DESCRIBE или EXPLAIN), поэтому запрос определяет только число измененных строк printf ("%lu rows affectedXn" (unsigned long)mysql_af fected_rows (conn) ) } не возвратила его, что означает наличие ошибки */ printf ("Problem processing result set\n");

} else /* результирующий набор возвращен */ { /*... обработка строк... */ mysql_free_result (res_set);

Функция mysql_f ield_count () впервые появилась в MySQI 3.22.24. До этой версии для подобных целей использовалась функ ция mysql_num_f ields (). Для написания функции, которая бь работала в любой версии MySQL, добавьте в любой файл, исполь зующий функцию mysql_f ield_count (), следующий фрагмент кода:

lif !defined(MYSQL_VERSION_ID) |I MYSQL_VERSION_ID<32224 #define mysql_field_count mysql_num_fields #endif Этот фрагмент заменяет функцию mysql_f ield_count () функцией mysql_num_f ields () при компиляции исходного кода в более старых версиях MySQL. MYSQL_FIELD_OFFSET mysql_field_seek (MYSQL_RES *res_set, MYSQL_FIELD_OFFSET o f f s e t ) ;

Находит информационную структуру столбца, определенную аргументом offset. В результате при следующем вызове функции mysql_f etch_f ield () будет возвращена информационная структура для заданного столбца. Аргумент offset не является индексом столбца. Он представляет собой значение MYSQL_FIELD OFFSET, полученное в результате более раннего вызова функции m y s q l _ f i e l d _ t e l l ( ) или m y s q l _ f i e l d _ s e e k ( ). Для возвращения к первому столбцу задайте значение аргумента o f f s e t равным 0. MYSQL_FIELD_OFFSET mysql_field_tell (MYSQL_RES *res_set);

Освобождает память, используемую результирующим набором. Функцию mysql_f ield_tell () необходимо вызывать для каждого MbU Часть IV. Приложения обрабатываемого результирующего набора. Обычно результирующие наборы создаются посредством вызова функции mysql_ store_result () или mysql_use_result (). Хотя некоторые функции клиентской библиотеки самостоятельно генерируют результирующие наборы в процессе своей работы, что делает пользователя ответственным за освобождение занимаемой ими памяти. К таким функциям относятся mysql_list_dbs (), mysql_list_ f i e l d s ( ), mysql_list_processes() Иm y s q l _ l i s t _ t a b l e s ( ). Х char * mysql_info (MYSQL *conn) ;

Возвращает строку с информацией об эффекте последнего выполненного запроса указанных типов. Формат строки задается сразу же после каждого запроса:

ALTER TABLE... Records: 0 Duplicates: 0 Warnings: 0 INSERT INTO... SELECT... Records: 0 Duplicates: 0 Warnings: 0 INSERT INTO... VALUES (...),(...)/ХХХ Records: 0 Duplicates: 0 Warnings: 0 LOAD DATA... Records: 0 Deleted: 0 Skipped: 0 Warnings: 0 UPDATE... Rows matched: 0 Changed: 0 Warnings: Выводимые числа, конечно же, могут изменяться в зависимости от результатов выполнения того или иного запроса. Для не представленных в этом списке запросов функция mysql_info() возвращает значение NULL. Для оператора INSERT INTO... VALUES функция m y s q l _ i n f o ( ) возвращает ненулевое значение только в том случае, если этот оператор включает несколько списков значений. Возвращаемая функцией m y s q l _ i n f o ( ) строка выводится на языке, используемом сервером. Х my_ulonglong mysql_insert_id (MYSQL conn) Возвращает значение AUTO_INCREMENT, сгенерированное последним выполняемым запросом данного соединения. Если запрос не был выполнен или в процессе выполнения не создал значение AUTO_INCREMENT, эта функция возвращает нулевое значение. Это означает, что функцию m y s q l _ i n s e r t _ i d ( ) следует вызывать сразу же после запроса, который должен сгенерировать новое значение. Если между выполнением этого запроса и запуском функции mysql_insert_id() будет выполнен промежуточный запрос, возвращаемое функцией значение будет сброшено. Возвращаемое нулевое значение не является корректным значением типа AUTO_INCREMENT, поскольку последние всегда начинаются с 1. (Существует, однако, одно исключение из этого правила. Если в созданный столбец типа AUTO_INCREMENT вставить отрицательПриложение Е. Программный интерфейс приложений С ное число, то последовательное его увеличение может привести к появлению значения 0 как закономерного элемента последовательности. В этом случае предполагается, что пользователь знает, что делает, поскольку функция mysgl_insert_idО возвращает значение без знака, что вызывает необходимость его дополнительной обработки.) Нужно заметить, что функция mysql_insert_id() отличается от SQL-функции LAST_INSERT_ID (). Первая используется программой-клиентом и устанавливается для каждого запроса, в то время как значение SQL-функции хранится на сервере и одинаково для всех запросов. Возвращаемое функцией mysql_insert_id() значение относится к отдельному соединению и не связано с изменением значения AUTO_INCREMENT для других соединений. Как выводить значения типа my_ulonglong, рассказывается в разделе "Скалярные типы данных". unsigned int mysql_num_fields (MYSQL_RES *res_set);

Возвращает число столбцов в результирующем наборе. Эта функция зачастую используется для определения числа столбцов текущей строки набора, что и показано в следующем примере:

MYSQL_ROW unsigned int while ((row = mysql_fetch_row (res_set)) != NULL) f for (1=0;

i < mysql_num_fields (res_set);

i++) { /* операции со значением row[i]... */ В версиях MySQL, предшествующих 3.22.24, функция mysql_num_ fields () применялась также для выполнения действий, реализуемых в текущих версиях функцией mysql_field_count (). Другими словами, она проверяла, является ли возвращаемое функциями mysql_store_resultО или mysql_use_result() значение NULL результатом ошибки. Именно поэтому в коде старых версий можно увидеть функцию mysql_num_fields О, вызываемую с указателем на механизм обработки соединения, а не на результирующий набор. Ранее эту функцию можно было вызывать двумя способами. В текущих же версиях MySQL вызов функции mysql_num_fields () с дескриптором соединения не допускается. Для подобных целей следует написать программу с функцией mysql_field_count (). В представленном описании этой функции показывается, как использовать ее в старых версиях MySQL. my_longlong mysgl_num_rows (MYSQL_RES *res_set) Часть IV. Приложения Возвращает число строк результирующего набора. Если данный результирующий набор был создан с помощью функции mysql_store_result (), функцию mysql_num_rows () можно затем вызвать в любой момент времени: if ((res_set = mysql_store_result ( c o n n ) ) == NULL) { /* Теперь можно вызывать функцию mysql_num_rows() */ ) Если для создания результирующего набора используется функция mysql_use_result (), функция mysql_nun\_rows () возвратит правильное значение только после выборки всех строк:

if ((res_set = mysql_use_result (conn)) == NULL) ( /* Функцию mysql_num_rows() нельзя еще вызывать */ while ((row = mysql_fetch_row (res_set)) '= NULL) { /* Функцию mysql_num_rows() нельзя еще вызывать */ ) /* Функцию mysql_num_rows() можно вызывать */ Как выводить значения типа my_ulonglong, рассказывается в разделе "Скалярные типы данных". Х MYSQL_ROW_OFFSET mysql_row_seek (MYSQL_RES *res_set, MYSQL_ROW_OFFSET offset);

Находит определенную строку в результирующем наборе. Функция m y s q l _ r o w _ s e e k ( ) подобна функции m y s q l _ d a t a _ s e e k ( ), однако ее аргумент o f f s e t не является номером строки. В его качестве может выступать только значение, полученное в результате вызова функции mysql_row_tell () ИЛИ mysql_row_seek (). Функция mysql_row_seek() строки. возвращает смещение предыдущей Для работы функции mysql_row_seek() необходима полная выборка набора, что позволяет использовать ее только в том случае, когда результирующий набор создается функцией mysql_store_ r e s u l t ( ), НО не mysql_use_result(). Х MYSQL_ROW_OFFSET mysql_row_tell (MYSQL_RES *res_set) Возвращает смещение, отражающее позицию текущей строки в результирующем наборе. Это значения не является номером строки и может задаваться только функцией mysql_row_seek (), но не mysql_data_seek(). Для работы функции mysql_row_tell () необходима полная выборка набора, что позволяет использовать ее только в том случае, когда результирующий набор создается функцией mysql_store_ r e s u l t ( ), НО не mysql_use_result(). Х MYSQL_RES * mysql_store_result (MYSQL *conn);

Приложение Е. Программный интерфейс приложений С Запускаемая после успешно выполненного запроса, эта функция возвращает результирующий набор и сохраняет его на компьютере пользователя. Если запрос вовсе не возвращает данные или при его выполнении возникла ошибка, функция mysql_store result () возвращает значение NULL При получении такого значения вызовите функцию mysql_field_count () или одну из функций диагностики ошибок. Это позволит определить, является возвращаемое значение NULL следствием отсутствия результирующего набора или возникновения ошибки. По завершении работы с результирующим набором задайте его в качестве аргумента функции raysql_free_result (} для освобождения памяти. Сравнение с функцией mysql_store_result() и mysql_use result () представлено в табл. Е.7. MYSQL_RES mysql_use_result (MYSQL *conn);

Запускаемая после успешно выполненного запроса эта функция инициализирует выборку результирующего набора, но собственно строки с данными не извлекает. Для последовательной выборки строк необходимо вызвать функцию mysql_f etch_row (). Если запрос вовсе не возвращает данные или при его выполнении возникла ошибка, функция mysql_use_result () возвращает значение NULL При получении такого значения вызовите функцию mysql_f ield_count () или одну из функций, создающих отчеты об ошибках. Это позволит определить, является возвращаемое значение NULL следствием отсутствия результирующего набора или возникновения ошибки. По завершении работы с результирующим набором задайте его в качестве аргумента функции mysql_free_result О для освобождения памяти. Сравнение функций mysql_store_result() и mysql_use_ result () представлено в табл. Е.7. Обе функции mysql_store_result() И mysql_use_resultО используются для выборки результирующих наборов, однако каждая из них определяет свой способ дальнейшей обработки наборов, а соответственно и функции такой обработки.

Информационные функции Функции этого класса обеспечивают информацию о клиенте, сервере, версии протокола и текущем соединении. Х char * mysql_get_client_info (void);

Возвращает строку, завершающуюся символом NULL, содержащую описание версии клиентской библиотеки, например "3 22.25".

Часть IV. Приложения Х char * mysql_get_host_info (MYSQL *conn);

Возвращает строку, завершающуюся символом NULL, содержащую описание текущего соединения, например, "Localhost via UNIX socket" или "your.host.com via TCP/IP". Х unsigned int mysql_get_proto_info (MYSQL *conn);

Возвращает номер версии протокола клиент/сервер, используемого для клиентского соединения. Х char * mysql_get_server_info (MYSQL *conn) Возвращает строку, завершающуюся символом NULL, содержащую описание версии сервера, например "3.22.25-log". За номером версии могут следовать суффиксы -log (регистрация активизирована), -debug (сервер работает в режиме отладки) или -demo (сервер работает в демонстрационном режиме). Х char * mysql_stat (MYSQL *conn);

Возвращает строку, завершающуюся символом NULL, содержащую описание информации о состоянии сервера, или значение NULL, если имеет место ошибка. Формат возвращаемой строки может меняться. В текущих версиях она выглядит примерно следующим образом: Uptime: 864034 Threads: I Questions: 32735 Slow queries: 50 Opens: 1428 Flush tables: 1 Open tables: 61 Выводимые значения можно интерпретировать следующим образом. Х Uptime Ч продолжительность работы сервера в секундах. Х Threads Ч число работающих потоков сервера. Х Questions Ч число выполненных сервером запросов. Х Slow queries Ч число запросов, выполняемых дольше, чем задано параметром сервера long_query_time. Х Opens Ч общее число открытых сервером таблиц. Х Flush tables Ч число выполненных команд FLUSH, REFRESH и RELOAD. Х Open tables Ч число открытых в настоящее время таблиц. Функция mysql_stat () возвращает ту же информацию, что и команда mysqladmin status. (А где же еще команда mysqladmin берет информацию?) Х unsigned long mysql_thread_id (MYSQL *conn) Возвращает номер потока, который сервер связывает с текущим соединением. Этот номер можно использовать как идентификатор ДЛЯ функции mysql_kill (). Приложение Е. Программный интерфейс приложений С Функцию mysql_thread_id () рекомендуется запускать лишь в тод случае, когда необходимо получить возвращаемое ею текущее значе ние. Если возвращенное значение сохранить, то через некоторо< время оно может уже не отвечать действительности. В частности, та кая ситуация будет иметь место после разрыва и восстановления со единения (например, с помощью функции mysql_ping ( ) ), по скольку сервер присвоит новый номер потока. Административные функции Описанные в этом разделе административные программы позволяют управлять различными аспектами функционирования сервера. Х int mysql_kill (MYSQL *conn, unsigned long thread_id);

Завершает работу потока, определенного аргументом thread_id. Обладающий привилегией PROCESS пользователь сможет завер шить любой поток. Все остальные пользователи имеют возмож ность завершить работу только своих потоков. Функция mysql_kill () возвращает нулевое значение в случае ус пешного выполнения операции и ненулевые значения во всех ос тальных случаях. Х int mysql_refresh (MYSQL *conn, unsigned int o p t i o n s ) ;

Эта функция подобна SQL-оператору FLUSH, однако позволяет за дать серверу обновить сразу несколько объектов сразу. Аргумен options этой функции может содержать одно или несколько оп ределенных в табл. Е.8 значений. Таблица Е.8. Опции функции mysql_ref resh () Значение опции REFRESH_GRANT REFRESH_LOG REFRESHJTABLES REFRESH HOSTS REFRESH_STATUS Выполняемая сервером операция Перезагрузить содержимое таблиц разрешений Начать новый общий журнал и журнал обновлений (даже если они в настоящее время уже ведутся) Закрыть все открытые таблицы Обновить кэш компьютера Сбросить до нуля значения переменных состояния Описанные в табл. Е.8 опции являются битовыми значениями, что позволяет комбинировать их с помощью символов " |" или "+", например, REFRESH_LOG|REFRESH_TABLES или REFRESH_LOG+REFRESH_ TABLES.

Часть IV. Приложения Более детально об операциях обновления рассказывается в описании оператора FLUSH в приложении Г, "Синтаксис SQL". Функция m y s q l _ r e f r e s h () возвращает нулевое значение в случае успешного выполнения операции и ненулевое значение в случае сбоя. int mysql_shutdown (MYSQL *conn) Указывает серверу завершить работу. Для использования этой функции пользователь должен обладать привилегией SHUTDOWN. Функция mysql_shutdown() возвращает нулевое значение в случае успешного выполнения операции и ненулевое значение в случае сбоя.

Функции отладки Описанные в этом разделе функции позволяют генерировать информацию отладки на любом конце соединения, как со стороны клиента, так и со стороны сервера. Однако для их использования необходимо, чтобы используемая версия MySQL была откомпилирована с поддержкой средств отладки. (Для этих целей при настройке дистрибуции MySQL используется опция Чwith-debug.) Х void mysql_debug (char *debug_string);

Выполняет операцию DBUG_PUSH с помощью строки debug_ string. Формат этой строки описан в справочном руководстве по MySQL. Для использования функции mysql_debug () клиентская библиотека должна быть откомпилирована с поддержкой средств отладки. Х int mysql_dump_debug_info (MYSQL *conn);

Указывает серверу записывать информацию отладки в журнал. Для использования этой функции пользователь должен обладать привилегией PROCESS. Функция mysql_dump_debug_inf о () возвращает нулевое значение в случае успешного выполнения операции и ненулевое значение в случае сбоя.

Исключенные функции Клиентская библиотека MySQL включает также множество функций, которые в настоящее время больше не используются, поскольку существует много других способов выполнить те же операции, которые выполняют эти функции. Большинство из них можно заменить посредством задания соответствующего запроса функции mysql_query (). Так, наПриложение Е. Программный интерфейс приложений С пример, функцию mysql_create_db ("db_name") дующей функцией:

mysql_query (conn, "CREATE DATABASE db_name") можно заменить сле Некоторые функции, такие, например, как mysql_connect () и mysql_eof () больше не используются, поскольку заменены функциями с более мощными возможностями или возвращающими больший объем информации. Это легко объяснить. С течением времени и по мере того, как MySQL распознавала все больше операторов SQL, некоторые функции оказывались ненужными и поэтому постепенно исключались. Так, например, в результате добавления SQL-оператора FLUSH PRIVILEGES функция mysql_reload() стала ненужной. В представленных описаниях функций указывается версия MySQL, начиная с которой функция перестала использоваться. Далее также описываются наиболее предпочтительные способы замены исключенных функций в текущих версиях. В клиентских библиотеках более ранних версий описываемую функцию, конечно же, можно использовать. Планируя долгую и плодотворную работу в будущем, пользователям следует избегать описанных функций. Некоторые или все из них будут исключены в MySQL 4.O. Х MYSQL * mysql_connect (MYSQL *conn, char *host_name, char *user_name, char *password);

Эта функция является "предшественником" функции mysql_ real_connect(). В настоящее время функция mysql_connect () реализована в виде варианта вызова функции mysql_real_ connect ( ). Х Эта функция исключена начиная с MySQL 3.22.0. int mysql_create_db (MYSQL *conn, char *db_name);

Создает базу данных с именем, определяемым аргументом dbjname. В настоящее время эту же операцию можно выполнить, задав оператор CREATE DATABASE функции mysql_query (). Функция mysql_create_db (} возвращает нулевое значение в случае успешного выполнения операции и ненулевое значение в случае сбоя. л Эта функция исключена начиная с MySQL 3.21.15. int mysql_drop_db (MYSQL *conn, char *db_name);

Удаляет базу данных с именем db_name. В настоящее время эту же операцию можно выполнить, задав оператор DROP DATABASE функции mysql_query (). Функция mysql_drop_db () возвращает нулевое значение в случае успешного выполнения операции и ненулевое значение в случае сбоя. Эта функция исключена начиная с MySQL 3.21.15.

Часть IV. Приложения Х my_bool mysql_eof (MYSQL_RES *res_set);

Возвращает ненулевое значение при достижении конца результирующего набора и нулевое значение при появлении ошибки. Эта функция особенно полезна, если для инициализации процесса выборки результирующего набора используется функция mysql_ use_result (), а для последовательной выборки строк Ч функция mysql_fetch_row(). В этом случае возвращаемое функцией mysql_fetch_row () значение NULL может отражать либо достижение конца набора, либо возникновение ошибки. Определить реальную причину и позволяет функция mysql_eof (). Для достижения аналогичного эффекта в настоящее время можно использовать функции mysql_errno() и mysql_error (}, хотя в действительно они возвращают гораздо больше информации. (Эти функции указывают также возможную причину возникновения ошибки, а не просто подтверждают факт ее наличия.) Эта функция исключена начиная с MySQL 3.21.17. Х MYSQL_RES * mysql_list_dbs (MYSQL *conn, char *wild);

Возвращает результирующий набор со списком имен баз данных сервера либо значение NULL, если имела место ошибка. Возвращаемый список включает имена баз данных, соответствующих заданному аргументом wild регулярному выражению SQL (которое может содержать специальные символы "%" и "_") или имена всех баз данных, если аргумент w i l d имеет значение NULL. Для освобождения памяти, занимаемой результирующим набором, пользователь впоследствии должен вызвать функцию mysql_f гее (). Возвращаемый функцией mysql_listdbs () список можно также получить, задав команду SHOW DATABASES в качестве аргумента функции mysql_query () и обработав результирующий набор. Эта функция исключена начиная с MySQL 3.22.0. Х MYSQL_RES * mysql_list_fields (MYSQL *tbl_name, char *wild);

*conn, char Возвращает результирующий набор со списком имен столбцов указанной базы данных либо значение NULL, если имела место ошибка. Возвращаемый список включает имена столбцов, соответствующих заданному аргументом wild регулярному выражению SQL (которое может содержать специальные символы "%" и "_") или имена всех столбцов, если аргумент wild имеет значение NULL. Для освобождеХния памяти, занимаемой результирующим набором, пользователь впоследствии должен вызвать функцию mysql_f гее (). Возвращаемый функцией mysql_list_fields () список можно также получить, задав команду SHOW COLUMNS в качестве аргумента функции mysql_query () и обработав результирующий набор. Приложение Е. Программный интерфейс приложений С 24 Эта функция исключена начиная с MySQL 3.22.0. MYSQL_RES * mysql_list_processes (MYSQL *conn);

Pages:     | 1 |   ...   | 7 | 8 | 9 | 10 | 11 |    Книги, научные публикации