WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 7 |

«Содержит примеры проектирования и систем корпоративного уровня и подробные объяснения к ним главы по вопросам хранения распределенных баз и другим сложным темам Леоном ведущим специалистом с ...»

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

Эта опция применяется в пакетном режиме. Она отменяет стандартную функцию преобразования непечатаемых символов в управляющие последовательности. На пример, в интерактивном если ячейка содержит символ новой строки, он бу дет воспринят буквально, и текст начнется с новой строки. В пакетном режиме этого не произойдет, но отобразится код \п. Опция влияет на символы табуляции (\t), новой строки обратной косой черты а также на первые 10 ASCII символов (\0 до ( U максимум) Эта опция позволяет защитить пользователей новичков от случайного выполнения инструкции DELETE или UPDATE, затрагивающей всю таблицу. Запросы, в которых в предложении WHERE не указан первичный ключ, отклоняются. Если задан аргумент, бу дет изменено значение переменных SQL_SELECT_LIMIT и У данной опции есть синоним:

set variable переменная=значение ( О переменная=значение) Эта опция позволяет установить значения некоторых переменных, в частности ( N) При наличии этой опции названия столбцов не включаются в результаты запроса.

( L) Эта опция подавляет вывод номеров строк в сообщениях об ошибках. Изначально номера строк появляются только в пакетном режиме. Приведем пример сообщения об ошибке:

ERROR 1054 at line 2: Unknown column in В случае опции строка будет выглядеть следующим образом:

ERROR Unknown column in список утилит Эта опция приводит к сокращению информации, возвращаемой клиенту.

Например, не будет выдано приветственное сообщение, а результаты запросов не бу дут заключаться в рамки.

( S файл) Эта опция переопределяет стандартный используемый для подключения к серверу. Обычно файл называется sock.

Эта опция заставляет утилиту выдавать результаты запроса в стандартном форма те. Значения ячеек будут отделяться друг от друга пробелами и символами вертикаль ной черты. В пакетном режиме столбцы разделяются символами табуляции без какого бы то ни было дополнительного оформления.

Эта опция заставляет утилиту записывать выходные данные в файл и доступна только в UNIX версии утилиты.

Эта опция заставляет утилиту очищать выходной буфер после каждого запроса.

Такой режим удобен при передаче данных по каналу другой программе.

имя) Эта опция задает имя пользователя, указываемое при регистрации на сервере. По умолчанию берется имя текущего пользователя, под которым он зарегистрировался в локальной системе.

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

( V) При наличии этойопции будет выдана лишь информация о версии утилиты.

vertical ( E) Эта опция заставляет утилиту выдавать результаты запроса в вертикальном виде.

Значения каждого столбца размещаться в отдельной строке.

282 Глава Утилиты командной строки При наличии этой опции утилита будет пытаться подключиться к серверу до тех пор, пока очередная попытка не увенчается успехом.

Команды В интерактивном режиме утилита реагирует на SQL инструкции и на спе циальные команды. Инструкции могут занимать несколько строк, а символ новой строки воспринимается как обычный символ пробела. Приглашение интерпретатора команд обычно выглядит так: После первой строки многострочной инструк ции выдается приглашение Если начать строковый литерал, а затем нажать , утилита сообщит об отобразив в приглашении или Конец строки помечается точкой с запятой.

Команды — это специальные ключевые слова, распознаваемые интерпретатором.

Их можно записывать двумя способами: в виде буквы с предшествующей обратной ко сой чертой (короткая форма) или в виде слова (именованная команда). Короткие ко манды могут присутствовать где угодно, а именованные команды по умолчанию долж ны начинать строку.

clear (\c) Эта команда отменяет выполнение текущей инструкции, удаляя ее из буфера. Ис пользуйте команду clear, если при вводе многострочной инструкции вдруг обнару жилось, что в предыдущей строке содержится ошибка.

connect Эта команда заставляет утилиту повторно подключиться к серверу. Можно указать новую базу данных и новый узел.

edit (\e) Эта команда вызывает внешний редактор для ввода текста запроса. Имя редактора содержится в переменной среды EDITOR. Если часть запроса уже введена, она будет доступна для редактирования. При выходе из редактора будет вновь вызван интер претатор mysql. Данная команда недоступна в Win32.

ego (\G) Эта команда заставляет утилиту выполнить текущую инструкцию и отобразить ее результаты в вертикальном стиле (см. описание опции exit (\q) Эта команда завершает сеанс работы с интерпретатором команд.

Полный список утилит до (\д) Эта команда заставляет утилиту выполнить текущую инструкцию.

Эта команда отображает справочную информацию о доступных командах.

(\n) Эта команда запрещает передавать результаты запросов программе постраничной разбивки.

pager [команда] (\Р команда) Эта команда заставляет утилиту посылать результаты запросов указанной программе постраничной разбивки. То же самое делает описанная выше опция print (\p) Эта команда отображает текущую инструкцию, содержащуюся в буфере.

quit (\q) Это синоним команды Эта команда включает режим автоматического дополнения имен.

source файл (\. файл) Эта команда заставляет утилиту выполнить инструкции, содержащиеся в ном текстовом файле.

status (\s) Эта команда возвращает информацию о клиенте и сервере (листинг 14.8).

mysql> status mysql 11.15 3.23.37, for Connection id: Current database:

Current user:

284 Глава Утилиты командной строки Current pager:

Using Server version: 3.23. Protocol version: Connection: via UNIX socket Client Server latinl UNIX socket:

Uptime: 1 day 4 hours 52 18 sec Threads: 5 Questions: 299 Slow queries: 0 Flush 1 Open tables: 0 Queries per second tee [файл] (\Т Эта команда заставляет утилиту посылать выходные данные не только на экран, но и в файл. Данный режим выключается командой Если файл не указан, берется предыдущее путевое имя.

use (\и Эта команда позволяет сменить базу данных.

mysql_install_db Этот сценарий создает стандартные таблицы привилегий в базе данных Обычно он запускается один раз при первой инсталляции программы MySQL. Если таблицы привилегий уже существуют, сценарий ничего не делает.

Этот Perl сценарий проверяет привилегии заданных узла, пользователя и базы данных. Синтаксис его вызова таков:

mysqlaccess [узел [пользователь I | | | имя] | пароль] | H ИМЯ] Полный список утилит | пароль] | U имя] I | и] I Вместо имени узла, пользователя или базы данных может стоять метасимвол обозначающий всю совокупность значений. Этот метасимвол необходимо взять в одинарные кавычки.

Утилита mysqladmin выполняет ряд административных задач. Формат ее вызова таков:

mysqladmin | С] | конфигурация] force I I | узел] | | Р | | s] | секунды] | S файл] | имя] | v] | V] \ [create имя] [drop имя] [flush hosts] [flush status] [password [ping] [refresh] [reload] [start slave] [status] [stop slave] [variables] 286 Глава Утилиты командной строки Утилита подключается к серверу и посылает ему одну или несколько команд, обычно разрешенных лишь администратору базы данных.

Эта опция задает каталог, где хранятся файлы наборов символов. Процесс созда ния таких файлов описан в главе 31, "Расширение возможностей MySQL". По умолча нию программа MySQL работает с набором Latin, известным как ISO8859 1. Эту уста новку можно изменить на этапе компиляции программы или же с помощью опции Эта опция заставляет утилиту посылать серверу данные в сжатом виде, что бывает удобно, когда соединение с сервером является очень медленным.

конфигурация) Эта опция заставляет утилиту записывать отладочную информацию в указанный журнальный файл. Поддержка данной опции должна быть включена в утилиту на эта пе компиляции. По умолчанию данные записываются в trace.

Подробнее о формате журнальных файлов рассказывается в главе 24, "Физическое хранение данных".

Эта опция заставляет утилиту продолжать обработку входных данных даже в слу чае обнаружения ошибки. При удалении базы данных подтверждение не потребуется.

При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

узел) Эта опция задает узел, к которому будет пытаться подключиться утилита. По умол чанию связь устанавливается с локальным узлом. В качестве аргумента может присут ствовать доменное имя или IP адрес.

Эта опция задает пароль для подключения к серверу. При ее отсутствии пароль не посылается. Если же пароль не указан, программа попросит его ввести. Учтите, что пароль, вводимый в командной строке, могут увидеть другие пользователи, просмат ривающие список процессов. Обратите также внимание на то, что между названием короткой версии опции и паролем не нужен пробел.

Полный список утилит ( Р порт) Эта опция переопределяет стандартный номер порта, с которым работает утилита (по умолчанию — 3306).

Эта опция меняет формат вывода команды extended status в режиме Вместо подсчета итоговых сумм будут вычисляться разности между текущими и пре дыдущими значениями.

Эта опция сокращает объем возвращаемой утилитой.

секунды) Эта опция заставляет утилиту непрерывно выполняться в течение указанного вре мени. В сочетании с одной из статусных команд она позволяет превратить терми нальное окно в постоянно обновляющийся системный монитор.

( S файл) Эта опция переопределяет стандартный используемый для подключения к серверу. Обычно файл называется sock.

имя) Эта опция задает пользователя, указываемое при регистрации на сервере. По умолчанию берется имя текущего пользователя, под которым он зарегистрировался в локальной системе.

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

( V) При наличии этой опции будет выдана лишь информация о версии утилиты.

( E) Эта опция заставляет утилиту выдавать результаты запроса в вертикальном виде.

Значения каждого столбца будут размещаться в отдельной строке.

При наличии этой опции утилита будет пытаться подключиться к серверу до тех пор, пока очередная попытка не увенчается успехом.

288 Глава Утилиты командной строки create имя Эта команда создает базу данных и является аналогом инструкции CREATE DATABASE.

drop имя Эта команда удаляет базу данных и является аналогом инструкции DROP DATABASE.

extended status Эта команда возвращает расширенную информацию о состоянии сервера. Сооб щаются значения различных переменных, а также некоторые статистические дан ные, например общее число подключений и суммарное время работы (листинг 14.9).

Аналогичные данные выдает инструкция SHOW STATUS. При наличии опций и отображаемая информация будет непрерывно обновляться.

extended status I Variable name | Value I Т О О Bytes_received Bytes_sent Connections Delayed_insert_threads Delayed_writes Delayed_errors Handler_delete Handler_read_next Handler_read_prev Handler_read_rnd_next Handler_update Handler_write Key_blocks_used Key_reads Key_write_requests Key_writes Max_used_connections Open_tables Open_files Open_streams Полный список утилит d_t Questions Select_full join range_join Select range check Select scan Slave running OFF Slave open temp tables Slow launch Slow queries Sort_merge passes Sort range Sort rows Sort scan Table_locks immediate Table locks waited cached running flush hosts Эта команда выполняет инструкцию FLUSH HOSTS, которая очищает кэш имен компьютеров и адресов Internet. Когда компьютер меняет свой IP адрес, данный бу фер нужно очистить. Это также позволит заново установить соединения, которые ранее были отменены из за превышения лимита ошибок.

flush logs Эта команда выполняет инструкцию FLUSH LOGS, которая закрывает и повторно открывает все журнальные файлы. Нумерованные файлы получат новые номера.

flush privileges Эта команда выполняет инструкцию FLUSH PRIVILEGES, которая повторно за гружает таблицы привилегий в базуданных Это необходимо делать после руч ного редактирования таблиц.

flush status Эта команда выполняет инструкцию FLUSH STATUS, которая сбрасывает боль шинство значений, сообщаемых инструкцией SHOW TABLE STATUS.

flush tables Эта команда выполняет инструкцию FLUSH TABLES, которая закрывает все лицы.

290 Глава Утилиты командной строки flush threads Эта команда очищает буфер потоков.

kill процесс, Эта команда разрывает одно или несколько соединений. Получить список актив ных соединений можно с помощью команды password Эта команда меняет пароль администратора. Учтите, что пароль, вводимый в ко мандной строке, могут увидеть другие пользователи, просматривающие список про цессов.

ping Эта команда посылает серверу проверяя, функционирует ли сервер.

processlist Эта команда возвращает информацию о соединениях, установленных с сервером.

Аналогичные данные можно получить с помощью инструкции SHOW PROCESSLIST. В первом столбце возвращаемой таблицы указываются идентификаторы соединений.

Это те значения, которые необходимо передавать команде kill.

refresh Эта команда закрывает таблицы и журнальные файлы.

reload Эта команда повторно загружает таблицы привилегий.

shutdown Эта команда останавливает сервер. Для его повторного запуска нужно вызвать демон В среде Windows NT и 2000 сервер запускается командой NET START В этой цели служит сценарий, располагаемый в каталоге например:

start start slave Эта команда запускает подчиненный сервер.

status Эта команда возвращает статусное сообщение, в котором указаны общее время ра боты сервера, число активных потоков, общее число запросов и среднее число запро сов в секунду (рис. 14.10).

Полный список утилит Uptime: 3914 Threads: 3 Questions: 63 Slow queries: 0 Flush tables: 1 Open tables: 0 Queries per second 0. stop slave Эта команда останавливает подчиненный сервер.

variables Эта команда выполняет инструкцию SHOW VARIABLES (см. главу 13, "Инструкции SQL").

version Эта команда возвращает информацию о версии сервера. Сюда же включаются и данные о его состоянии (листинг [root@red version 3.23.37, for on i Copyright 2000 MySQL & MySQL Finland & This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version Protocol version Connection via UNIX socket UNIX socket Uptime: 56 36 sec Threads: 3 Questions: 42 Slow queries: 0 0 Flush 1 Open Queries per second avg:

Эта утилита преобразует записи двоичного журнального файла в текстовую форму или в SQL инструкции. Синтаксис вызова утилиты таков:

mysqlbinlog I | сервер] | о записи] \ пароль] I порт] 292 Глава Утилиты командной строки | байты] |.

| имя] | и имя] | V] После списка опций следует перечень журнальных файлов. Результаты работы за писываются в поток При наличии этой опции возвращается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

сервер) Эта опция переопределяет стандартный сервер (по умолчанию — записи) Эта опция заставляет утилиту пропустить указанное число записей файла.

пароль) Эта опция задает пароль для подключения к серверу.

( P порт) Эта опция переопределяет стандартный номер порта для подключения к серверу.

байты) Эта опция заставляет утилиту начать чтение файла с указанной позиции.

При наличии этой опцииутилита будет выдавать лишь информацию о запросах.

имя) При наличии этойопции возвращается информация об указанной таблице.

имя) Эта опция задает имя пользователя, указываемое при регистрации на сервере.

( V) При наличии этойопции возвращается лишь информация о версии утилиты.

Полный список утилит Сценарий mysqlbug посылает отчет о найденных ошибках команде разработчиков MySQL. В этот отчет должна быть включена тщательно собранная информация о сервере, включая его версию, название операционной системы и параметры конфигурации.

Данный сценарий автоматизирует процесс сбора информации, но описание ошибки необходимо ввести самостоятельно. С этой целью запускается текстовый редактор, где подсказывается, какие сведения следует указать. При выходе из редактора сообщение будет направлено в соответствующий список рассылки программы MySQL.

Это версия утилиты которая работает с библиотекой в среде Win32. Она требует наличия в системе DLL файла пакета Демон mysqld представляет собой сервер MySQL. Он работает в фоновом режи ме, принимая запросы от клиентов. Синтаксис вызова демона таков:

mysqld | каталог] | OLDEST | RANDOM | каталог] | Т flush] | 294 Глава Утилиты командной строки | | L каталог] | | | таблица] он] | О | список утилит | | и | V] При работе в UNIX нужно пользоваться сценарием а не вызывать демон напрямую. Пользователи Windows NT и Windows 2000 должны установить де мон в виде сервиса с помощью опции Большинство перечисленных ниже опций может присутствовать в конфигураци онных файлах, о которых рассказывалось в начале главы. В этом случае перед именем опции не ставятся дефисы. Например, запись в командной строке эк вивалентна записи user=leon в группе Эта опция включает режим ANSI, в котором синтаксис SQL инструкций немного меняется. В частности, между именами функций и открывающими скобками разре шаются пробелы. Это означает, что все имена функций становятся зарезервирован ными словами и их нельзя использовать в качестве имен таблиц или столбцов.

Тип столбца REAL преобразуется в тип FLOAT, а не DOUBLE. Для транзакций уста навливается уровень изоляции SERIALIZABLE. Оператор I I становится оператором конкатенации строк. Двойные кавычки запрещается использовать для выделения строковых литералов. Они теперь применяются вместо обратных кавычек для выде ления имен баз данных, таблиц и столбцов.

Все эти изменения делают программу MySQL более совместимой со стандартом ANSI.

каталог) Эта опция задает основной каталог дистрибутива.

Эта опция задает начальный каталог для файлов Berkeley DB.

Эта опция задает правило снятия взаимоблокировок с таблиц Berkeley DB. Аргу мент тип может принимать одно из четырех значений: DEFAULT, OLDEST, RANDOM и YOUNGEST. Первое значение определяет стандартное правило, применяемое в биб лиотеке клиентских функций. В остальных случаях отменяется соответственно самая старая транзакция, произвольная транзакция или самая недавняя транзакция.

Эта опция задает каталог для журнальных файлов Berkeley DB.

296 Глава Утилиты командной строки Эта опция подавляет восстановление таблиц Berkeley DB при запуске сервера.

Эта опция отключает режим синхронной очистки журнальных файлов Berkeley DB.

Эта опция разрешает многозадачный режим обслуживания таблиц Berkeley DB.

Эта опция задает каталог для временных файлов модуля Berkeley DB.

Эта опция заставляет демон записывать временные таблицы на диск, а не хранить их в памяти. Программа MySQL самостоятельно определяет, когда следует "сбрасывать" таблицы на диск, поэтому данная опция считается устаревшей.

Эта опция задает IP адрес сервера.

Эта опция заставляет сервер фиксировать обновления указанной базы данных только в двоичном журнале.

Эта опция заставляет сервер отключить для указанной базы данных двоичный журнал.

Эта опция используется только инсталляционными сценариями.

Эта опция задает каталог, в котором хранятся файлы наборов символов.

Эта опция задает каталог, который после запуска сервера станет корневым.

Эта опция заставляет демон держать консольное окно открытым (применима только в Windows версиях Полный список утилит Эта опция позволяет демону создавать файл дампа в случае аварийного завершения.

каталог) Эта опция задает каталог, в котором будут храниться табличные данные. Для каж дой базы данных создается отдельный подкаталог, содержащий файлы таблиц.

Эта опция задает стандартный набор символов.

Эта опция задает стандартный тип таблиц. Обычно по умолчанию принят тип но можно также задать тип ISAM, HEAP, Gemini и Все они опи саны в главе 24, "Физическое хранение данных". При создании таблицы всегда можно явно указать ее тип.

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

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

( T Эта опция переводит сервер в режим отладки. С помощью битового поля включа ются различные опции, известные лишь разработчикам MySQL, поэтому применять данную опцию рядовому пользователю не рекомендуется.

Эта опция заставляет демон записывать изменения на диск после каждого запроса.

Такой режим может оказаться полезен, если сервер часто "сбоит".

Эта опция активизирует журнал восстановления таблиц Gemini (включена по умолчанию).

Эта опция ослабляет требование, в соответствии с которым журнал транзакций очищается после каждой инструкции COMMIT.

298 Глава Утилиты командной строки Эта опция отключает журнал восстановления таблиц Gemini.

Эта опция заставляет демон осуществлять запись в таблицы Gemini в обход сис темного буфера ввода вывода.

При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

Эта опция задает путь к файлу, содержащему SQL инструкции. Данный файл вы полняется при запуске сервера.

Эта опция задает имена и размеры файлов данных, используемых таблицами Путь указывается относительно начального каталога Размер обычно выражается в мегабайтах (суффикс Например, запись ОМ указывает на файл размером 300 Мбайт. Спецификации файлов отделяются друг от друга символом точки с запятой.

Эта опция задает каталог для всех файлов InnoDB.

| 1} Если эта опция равна нулю, то при завершении транзакции, связанной с измене нием таблиц InnoDB, данные не будут немедленно записаны на диск.

Эта опция задает размер архива журнальных файлов InnoDB. Поскольку програм ма MySQL ведет свои собственные журналы обновлений, архивировать журналы In noDB нет необходимости.

Эта опция задает каталог, в котором будут храниться архивы журнальных файлов InnoDB.

Эта опция задает каталог для хранения журнальных файлов InnoDB.

Полный список утилит При наличии этой опции демон будет инсталлирован в виде сервиса в Win dows NT и Windows 2000. В других операционных системах данная опция недоступна.

Именем сервиса будет MySQL. Сервис можно запускать и останавливать с щью команды NET или команд панели управления сервисами.

( L каталог) Эта опция задает язык сообщений об ошибках (точнее, каталог, где хранятся общения на соответствующем языке). Файлы сообщений компилируются в файлы с расширением с помощью утилиты Эта опция включает регистрацию всех запросов на подключение к серверу и всех SQL запросов. По умолчанию журнальный файл будет создан в каталоге данных и на зван по имени узла с добавлением расширения log, например log. Такой файл называется журналом запросов. О различных форматах журнальных файлов рассказывается в главе 24, "Физическое хранение данных".

Эта опция задает имя индексного файла для двоичного журнала. По умолчанию файл назван по имени узла с добавлением суффикса index, например [=каталог] Эта опция включает двоичный журнал, который используется при репликации. По умолчанию журнальный файл назван по имени узла с добавлением суффикса bin, а в качестве расширения используется номер журнала, например Эта опция включает регистрацию всех действий, выполняемых над таблицами Данный режим применяется разработчиками MySQL при отладке программы и не представляет интереса для рядовых пользователей. По умолчанию создается жур нальный файл При наличии этой опции в журнал обновлений будет записываться дополнитель ная информация. Кроме того, запросы, в которых не используются индексы, будут регистрироваться в журнале медленных запросов, если таковой ведется.

Эта опция заставляет подчиненный сервер регистрировать обновления, получае мые от главного сервера, в двоичном журнале. По умолчанию данный режим отклю чен. Если подчиненный сервер является главным для другого сервера в цепочке, эту опцию нельзя использовать.

300 Глава Утилиты командной строки Эта опция включает регистрацию медленных т.е. которые вы полняются дольше определенного времени. Соответствующий лимит задан в пере менной long_query_time.

Эта опция включает регистрацию обновлений. По умолчанию журнальный файл назван по имени узла, а в качестве расширения используется номер журнала, напри 001.

При наличии этой опции и нструкции DELETE, INSERT и UPDATE будут иметь более низкий приоритет, чем инструкции SELECT.

Эта опция задает интервал времени, в течение которого можно пытаться но подключиться к главному серверу (по умолчанию — 60 с).

Эта опция задает доменное имя или IP адрес главного сервера.

Эта опция переопределяет стандартное имя файла, используемого подчиненным сервером для отслеживания своей позиции в журнальном файле главного сервера. По умолчанию файл называется Эта опция задает пароль, с помощью которого подчиненный сервер регистриру ется на главном сервере.

Эта опция задает порт, прослушиваемый главным сервером в ожидании запросов на подключение (по умолчанию —3306).

Эта опция задает имя пользователя, указываемое подчиненным сервером при ре гистрации на главном сервере.

Эта опция заставляет операционную систему хранить исполняемый файл сервера в физической памяти и не выгружать его страницы на диск. Такой режим допустим лишь в техсистемах, где используется функция Полный список утилит При наличии этой опции демон будет пытаться восстанавливать поврежденные таблицы в момент запуска сервера. Необходимо, чтобы была также установлена оп ция skip locking. Демон все неправильно закрытые или повреж денные таблицы, а затем выполнит действие, определяемое указанными опциями 14.2).

Опция Директива BACKUP Создать резервную копию файла перед его восстановлением FAULT Ничего не делать FORCE Восстанавливать таблицу даже в том случае, если некоторые записи будут потеряны He проверять строки таблиц, если отсутствуют удаленные блоки Эта опция предназначена для активизации новых, возможно небезопасных, функций.

Эта опция заставляет сервер придерживаться старой версии клиентского протокола.

Данное изменение затрагивает лишь клиентов более ранних версий, чем 3.20.28.

Эта опция задает путевое имя файла, в котором хранится идентификатор процес са. Зная данный идентификатор, можно уничтожить серверный процесс.

( P порт) Эта опция задает порт, прослушиваемый сервером в ожидании запросов на под ключение (по умолчанию — Эта опция означает удаление сервиса MySQL из Windows. В других операционных системах данная опция недоступна.

Эта опция заставляет подчиненный сервер реплицировать только указанную базу данных. Если необходимо реплицировать группу баз данных, укажите несколько та ких опций.

302 Глава Утилиты командной строки Эта опция заставляет подчиненный сервер реплицировать только указанную таб лицу. Если необходимо реплицировать группу таблиц, укажите несколько таких оп ций. которые не были упомянуты, не реплицируются.

Эта опция запрещает серверу реплицировать указанную базу данных.

Эта опция запрещает серверу реплицировать указанную таблицу.

Эта опция создает правило, по которому имя базы данных главного сервера транс лируется в имя базы данных подчиненного сервера. Например, правило rewrite db=freetrade >store означает, что база превратится в базу store.

В этой опции с помощью метасимволов задаются имена таблиц, репли цируемых подчиненным серверо м. Имени таблицы должно предшествовать имя базы данных, например В этой опции с помощью метасимволов задаются имена таблиц, которые не долж ны реплицироваться подчиненным сервером. Имени таблицы должно предшество вать имя базы данных, например cat%.

Эта опция отключает некоторые функции оптимизации.

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

set variable переменная=значение ( О Эта опция задает значение указанной серверной переменной. Список переменных приведен в табл. 14.3.

Полный список утилит Переменная Описание back_log Максимальное число не обслуженных запросов на подключение;

по достиже нии этого предела сервер перестанет реагировать на запросы Размер кэша для таблиц Berkeley DB bdb_log_buffer_size Размер буфера журнальной регистрации для таблиц Berkeley DB bdb_max_lock Максимальное число блокировок для таблиц Berkeley DB Размер буфера для двоичного журнала connect_timeout Время простоя, по истечении которого запрос на подключение будет отменен Число строк, которые могут быть записа ны инструкцией INSERT DELAYED, преж де чем снова будут разрешены операции чтения Время, отводимое на выполнение инст рукции INSERT DELAYED delayed_queue_size строк, поставленных в очередь на отложенную запись Интервал времени между операциями закрытия таблиц Максимальное число пользователей, ко торые могут одновременно работать с таблицами Gemini Число буферов таблиц Gemini, храни мых в кэше Число потоков ввода вывода, связанных с таблицами Gemini Максимальное число блокировок лиц Gemini (по умолчанию — 4096) Максимальное число попыток повторно поставить блокировку на таблицу Gemini 304 Глава Утилиты командной строки Переменная Описание Размер резидентного буфера, исполь зуемого модулем для хранения внутренних структур данных Размер буфера, используемого модулем InnoDB для кэширования таблиц и ин дексов innodb_file_io_threads Число потоков InnoDB, щих операции файлового ввода вывода innodb_lock_wait_timeout Интервал времени, в течение которого транзакция InnoDB ожидает снятия взаимоблокировки;

по прошествии го времени транзакция будет отменена fer_size Размер буфера, используемого для запи си журнальных файлов InnoDB innodb_log_files_in_group. Число журнальных файлов InnoDB, уча ствующих в цикле ротации ile_size Размер журнальных файлов InnoDB innodb_mirrored_log_groups Число идентичных групп журнальных файлов Допустимое время простоя в интерак тивном сеансе Размер буфера для операций ния, в которых не используются индексы Размер индексного буфера, мого всеми соединениями Число секунд, по истечении которого выполняющийся запрос считается мед ленным lower_case_table_names Будет равна 1, если имена всех таблиц принудительно переводятся в нижний регистр max_allowed_packet Максимальный размер пакета в байтах Полный список утилит Переменная Описание Максимальный размер двоичного жур нала транзакций max_binlog_size Предельный размер в по дости жении которого произойдет ротация двоичных журнальных файлов max_connections Максимальное число соединений max_connect_errors Максимальное число ошибок подклю чения, по достижении которого доступ к узлу блокируется Максимальное число потоков, в кото рых выполняются инструкции INSERT DELAYED max_heap_table_size Максимальный размер таблиц HEAP Максимальное число строк, которое может быть получено в результате динения таблиц max_sort_length Максимальное число байтов, исполь зуемых при сортировке столбцов типа BLOB и TEXT Максимальное число временных таблиц Максимальное число соединений для одного пользователя max_write_lock_count Число блокировок записи, после кото рого необходимо разрешить блокиров ки чтения Максимальная разница в размерах вре менного файла, используемого для соз дания индекса, и индексного буфера для таблиц считается, что размеры таблиц заданы в мегабайтах Максимальный размер (в мегабайтах) временного файла, ис пользуемого для создания индекса таблицы MylSAM;

в случае превышения этого предела будет использован индексный буфер 306 Глава Утилиты командной строки Переменная Описание Размер буфера, используемого для соз дания индексов таблиц er_length Ожидаемая длина запросов, посылаемых клиентами Предельное время ожидания следующих данных в ходе операции чтения Число попыток восстановить прерван ную операцию чтения Предельное время ожидания записи требуемого блока данных Максимальное число файловых дескрип используемых query_buffer_size Начальный размер буфера запросов Размер буфера, используемого при ска нировании таблиц Число секунд, по истечении которого за пуск потока будет считаться медленным Размер буфера, используемого для сор тировки записей table_cache Максимальное число открытых таблиц thread_cache_size Число потоков, хранимых в кэше для повторного использования Указание на число одновременных по токов (только в Solaris) thread_stack Размер стека потоков tmp_table_size Максимальный размер временной лицы, по достижении которого она за писывается на диск Период простоя, по истечении го соединение закрывается Полный список утилит Эта опция отключает поддержку таблиц Berkeley DB. Если использование таких лиц не планируется, включите данную опцию, чтобы не расходовались лишние ресурсы.

Эта опция запрещает выполнять одновременные операции вставки данных в лицы Она предназначена для целей отладки.

При наличии этой опции запросы на отложенную запись ключей будут игнориро ваться.

Эта опция отключает поддержку таблиц Gemini.

Эта опция означает запуск сервера в режиме, при котором всем пользователям предоставлены максимальные привилегии. Данный режим помогает администратору, забывшему свой пароль, вернуть контроль над сервером. Привилегии восстанавлива ются с помощью команды reload или инструкции FLUSH PRIVILEGES.

Эта инструкция отключает кэш доменных имен. Для поиска доменных имен будут посылаться запросы серверу DNS.

Эта опция отключает поддержку таблиц Если использование таких таблиц не планируется, включите данную опцию, чтобы не расходовались лишние ресурсы.

Эта опция отключает системный режим блокирования таблиц. Она необходима в некоторых операционных системах.

Эта опция отключает режим преобразования IP адресов в доменные имена.

Эта опция запрещает соединения TCP/IP, разрешая лишь соединения, устанавли ваемые посредством 308 Глава Утилиты командной строки Эта опция предназначена для отключения новых, возможно функций.

Эта опция говорит о том, что для выполнения инструкции DATABASES поль зователи должны иметь привилегию PROCESS.

Эта опция запрещает подчиненному серверу начинать процесс репликации в мент своего запуска. Репликацию можно инициировать вручную с помощью инструк ции SLAVE START.

Эта функция отменяет приоритеты потоков.

Эта функция задает путь к с помощью которого ные соединения (по умолчанию — sock).

Эта опция заставляет главный сервер использовать для двоичного журнального файла и журнала обновлений одно и то же имя.

Эта опция поддерживается только в Windows версиях MySQL. Если она присутст вует, демон не будет запускаться в виде сервиса.

Эта опция запрещает демону назначать каждому новому временному файлу уни кальное имя. Вместо этого будет создан небольшой пул имен. Данный прием позволя ет избежать ошибки, присущей ядрам Linux вплоть до версии 2.4.3 (они неправильно выделяют память при создании группы файлов с разными именами).

каталог) Эта опция задает каталог для временных файлов.

Эта опция задает стандартный уровень изоляции транзакций. Значение аргумента может быть таким: READ COMMITTED, READ UNCOMMITTED, и (см. описание инструкции SET TRANSACTION в главе 13, "Инструкции SQL").

Полный список утилит имя) Эта опция задает имя пользователя, запускающего демон ( V) При наличии этой опции возвращается лишь информация о версии утилиты.

Это версия сервера MySQL, скомпилированная с включением всех возможных оп ций. Функционально она идентична демону mysqld.

Это версия сервера MySQL, скомпили рованная для систем Windows NT и Win dows 2000. В нее включена поддержка именованных каналов. Если при вызове про граммы не указано никаких опций, демон пытается запуститься в виде сервиса.

Это версия сервера MySQL, оптимизированная для процессоров Pentium. Ее ре комендуется применять в Windows 95 и Windows 98.

Эта утилита позволяет запускать несколько серверов MySQL одновременно. Син таксис ее вызова таков:

Утилита запускает несколько копий демона mysqld, каждую со своими конфигура ционными параметрами. Наборы параметров под специальными заго ловками конфигурационного файла. Обычно установки сервера нах одятся в разделе Если же запускается несколько серверов, то каждой группе параметров присваивается целочисленный например В листинге 14.12 показана конфигурация двух серверов. Первый из них хранит данные в подкаталоге var2 и прослушивает порт 3307. Второй сервер работает с ка 310 Глава Утилиты командной строки var3 и прослушивает порт 3308. В ка ждой из групп могут присутствовать бые параметры mysqld user password multipass log socket port /usr/local/mysql/var user [mysqld3] socket port datadir user У каждого сервера должны быть свои порт, файл, хранящий идентифика тор процесса, и каталог данных. Подробнее о запуске нескольких серверов рассказы вается в главе 29, "Распределенные базы данных".

Утилита способна запускать (директива start), останавливать (директива stop) и описывать (директива report) серверы, определяемые номером группы. Номера или их диапазоны разделяются запятыми. Пробелы в списке номеров недопустимы.

Эта опция задает путь к конфигурационному файлу. Формат стандартного файла был описан в начале главы. В UNIX он обычно называется При наличии этой опции утилита выдает лишь образец конфигурационного файла.

При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

Эта опция задает к журнальному файлу (по умолчанию — log).

список утилит Эта опция задает путь к утилите которая вызывается при выгрузке серверов.

Эта опция задает путь к демону который вызывается при запуске серверов.

К демону можно обращаться непосредственно или с помощью сценария Эта опция отменяет журнальную регистрацию.

Эта опция задает пароль, указываемый при запуске утилиты mysqladmin.

При наличии этой опции утилита будет взаимодействовать с сервером не через а по протоколам TCP/IP.

Эта опция задает имя пользователя, указываемое при запуске утилиты mysqladmin.

что для всех серверов, упомянутых при вызове утилиты mysqld_multi, ны использоваться одинаковые имя пользователя и пароль. Поскольку у каждого ра своя база данных нужно создать в ней учетную запись этого пользователя и предоставить ему привилегию на останов сервера.

При наличии этойопции возвращается лишь информация о версии утилиты.

Утилита mysqldump извлекает информацию из указанной базы данных. Синтаксис ее вызова таков:

mysqldump I a] I A] I c] | C] | \ конфигурация] | I F] force | f] I | узел] I I | | \ | port] \ О значение] I файл] | Т файл] | имя] V] | условия] Эта утилита формирует SQL инструкции, предназначенные для ука занных таблиц в другой базе данных. Полученные инструкции записываются в поток Как минимум, это будут инструкции CREATE TABLE и INSERT.

В стандартном режиме утилита принимает имя одной базы данных и необязательный список ее таблиц. Если ни одна таблица не указана, будет воссоздана вся база данных. С помощью опции можно задать список баз данных, но тогда список таблиц будет игнорироваться.

В листинге 14.13 демонстрируется воссоздание таблицы базы данных зультаты работы утилиты mysqldump записываются в файл В главе 25, "Устранение последствий катастроф", речь пойдет о применении утилиты mysqldump и других методах резервного копирования баз данных.

cat MySQL dump 8. Host: Database: mysql Server version Полный список утилит Table structure for table DROP TABLE IF EXISTS db;

CREATE TABLE db Host char(60) binary NOT NULL default Db binary NOT NULL default User binary NOT NULL default Select_priv NOT NULL default Insert_priv NOT NULL default Update_priv NOT NULL default Delete_priv NOT NULL default Create_priv NOT NULL default Drop_priv NOT NULL Grant_priv NOT NULL default References_priv NOT NULL default Index_priv NOT NULL default Alter_priv NOT NULL default PRIMARY KEY KEY User (User) TYPE=MyISAM tt Dumping data for table tt LOCK TABLES db WRITE;

INSERT INTO db VALUES UNLOCK Когда присутствует эта опция, перед каждой инструкцией CREATE TABLE будет вставляться инструкция DROP TABLE IF EXISTS.

Эта опция заставляет утилиту блокировать таблицы для записи перед вставкой строк. Перед каждой группой инструкций INSERT будет стоять инструкция LOCK а после группы — инструкция UNLOCK TABLES.

Эта опция требует от утилиты придерживаться синтаксиса SQL инструкций, спе цифичного для MySQL. В результате полученный файл сценария может не поддержи ваться другими серверами.

Глава Утилиты командной строки ( A) При наличии этой опции будут воссозданы все базы данных. Указывать списки баз данных и таблиц нет необходимости, так как в сценарий включаются щие инструкции CREATE DATABASE.

При наличии этой опции имена столбцов, совпадающие с ключевыми словами, бу дут сопровождаться префиксом, соответствующим имени таблицы.

Эта опция задает каталог, в котором хранятся файлы наборов символов.

Эта опция заставляет утилиту включать в инструкции списки столбцов.

( C) При наличии этой опции утилита будет сжимать данные, передаваемые от клиента к серверу.

( B) Эта опция позволяет указывать список воссоздаваемых баз данных. Все аргументы, стоящие после списка опций, считаются именами баз данных, а не таблиц. Как и в случае опции в сценарий включаются инструкции CREATE DATABASE.

конфигурация) Эта опция заставляет утилиту записывать отладочную информацию в указанный журнальный файл. Поддержка данной опции должна быть включена в утилиту на эта пе компиляции. По умолчанию данные записываются в файл trace.

Подробнее о формате журнальных файлов рассказывается в главе 24, "Физическое хранение данных".

Эта опция меняет стандартный набор символов, установленный на этапе компи ляции программы MySQL. Обычно таковым является набор Latin (ISO88 1). Указы ваемый файл должен находиться в каталоге, который был задан с помощью опции Этот файл представляет собой не просто коллекцию сим волов. В нем описаны правила сортировки алфавита и трансляции каждого символа в верхний и нижний регистры.

О создании наборов символов рассказывается в главе "Расширение стей MySQL".

список Эта опция заставляет утилиту добавлять к инструкциям INSERT ключевое слово DELAYED.

Эта опция разрешает добавлять по несколько записей за раз.

Эта опция используется совместно с опцией и задает символ, применяемый для выделения полей.

Эта опция используется совместно с опцией и задает символ, применяемый для отмены специального назначения управляющих символов.

Эта опция используется совместно с опцией и задает символ, применяемый для выделения строковых полей.

Эта опция используется совместно с опцией и задает символ разделитель полей.

( F) Эта опция заставляет утилиту очищать журнальные файлы перед тем, как начи нать процесс генерации таблиц.

force Эта опция заставляет утилиту продолжать процесс генерации таблиц даже в случае возникновения ошибки.

help При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

узел) Эта опция задает узел, к которому будет пытаться подключиться утилита. По умол чанию связь устанавливается с локальным узлом. В качестве аргумента может ствовать доменное имя или IP адрес.

Глава Утилиты командной строки Эта опция используется совместно с опцией и задает символ разделитель строк.

( I) Эта опция заставляет утилиту блокировать все таблицы для чтения перед тем, как начинать процесс генерации таблиц. При выполнении инструкции LOCK TABLES ука зывается ключевое слово LOCAL, что позволяет выполнять одновременные операции вставки в таблицы Эта опция запрещает создавать инструкции CREATE DATABASE, даже если ствует опция или Эта опция запрещает инструкции CREATE TABLE. Разрешаются лишь инструкции INSERT.

Эта опция запрещает создавать инструкции INSERT. Разрешаются лишь инструк ции CREATE TABLE.

Эта опция обозначает режим оптимальных установок. Активизируются следующие опции:

tables.

Эта опция задает пароль для подключения к серверу. При ее отсутствии пароль не посылается. Если же пароль не указан, программа попросит его ввести. Учтите, что пароль, вводимый в командной строке, могут увидеть другие пользователи, просмат ривающие список процессов. Обратите также внимание на то, что между названием короткой версии опции и паролем не нужен пробел.

( Р port) Эта опция переопределяет стандартный номер порта, с которым работает утилита (по умолчанию — Эта опция заставляет утилиту не результаты своей работы, а жать их строка за строкой.

Полный список утилит При этой опции имена таблиц и столбцов будут заключаться в обратные кавычки.

переменная=значение ( О Эта опция позволяет установить значения переменных (определяет максимальный размер пакета) и (определяет раз мер сетевого буфера).

( S файл) Эта опция переопределяет стандартный используемый для подключения к серверу. Обычно файл называется sock.

( Т файл) При наличии этой опции утилита создавать для каждой таблицы два файла.

Первый файл называется так же, как и таблица, и имеет расширение нем со держится инструкция CREATE TABLE.

Второй файл называется аналогично, но имеет расширение В нем содер жатся записи таблицы с символами табуляции в качестве разделителей полей. Записи разделяются символами новой строки. Именно такой файл создается инструкцией SELECT INTO. С помощью опций и можно изменить формат файла данных.

Эта опция отменяет опцию имя) Эта опция задает имя пользователя, указываемое при регистрации на сервере.

Эта опция заставляет утилиту сопровождать свои действия комментариями.

( V) При наличии этой опции будет выдана лишь информация о версии утилиты.

условия) Эта опция заставляет утилиту применять условия отбора к записям, включаемым в инструкцию INSERT. He забудьте взять всю строку опции в двойные кавычки, чтобы избежать проблем с анализом аргументов командной строки.

Глава Утилиты командной строки В листинге 14.14 с помощью опции из таблицы отбираются только те записи, которые относятся к пользователю db Этот Perl сценарий отображает на экране журнал медленных запросов. Синтаксис его вызова таков:

mysqldumpslow выражение] сервер] 1] тип] Если не указать путь к журнальному файлу, сценарий попытается самостоятельно найти его на основании установок конфигурационного файла. Будут выведены дампы всех найденных журналов данного типа.

а Эта опция запрещает группировать запросы по аргументам предложения WHERE.

Обычно два запроса, отличающихся лишь литералами в предложении WHERE, объе диняются в один.

d Эта опция включает режим отладки.

g выражение При наличии этой опции будут учитываться лишь те инструкции, которые соот ветствуют заданному регулярному выражению.

узел Эта опция задает имя узла, на основании которого будут отбираться журнальные файлы. В имени узла могут присутствовать метасимволы.

список сервер Эта опция задает экземпляр сервера.

I Эта опция заставляет сценарий добавлять время блокировки к общему времени выполнения запроса.

количество_цифр Эта опция заставляет сценарий считать одинаковыми все числа, в представлении которых содержится не менее указанного количества цифр.

Эта опция изменяет порядок сортировки на обратный.

Эта опция определяет, какого рода информацию сценарий будет искать в нальном файле (табл. 14.4).

Тип Описание Средняя длительность блокировки Среднее число записей at Среднее время выполнения 1 Длительность блокировки Число записей Время выполнения число_запросов Эта опция задает число анализируемых записей журнального файла.

V Эта опция заставляет сценарий выдавать более подробные сообщения.

Этот Perl сценарий создает копию активной базы данных. Синтаксис его вызова таков:

320 Глава командной строки I | | Р I I файл] | имя] Сценарий блокирует все таблицы базы данных, а затем создает их образы в ука занном каталоге. Можно отбирать таблицы, имена которых соответствуют или не со ответствуют (метасимвол ~) регулярному выражению.

Этот сценарий требует наличия модуля DBI. Кроме того, его можно запускать только на сервере, т.е. где хранится база данных.

Эта опция заставляет сценарий не удалять существующие резервные копии, а реименовывать их. В случае успешного завершения старые копии удаляются, иначе — восстанавливаются.

Эта опция заставляет сценарий добавлять в контрольную таблицу запись о созда нии резервной копии каждой таблицы. Имени контрольной таблицы должно ствовать имя базы данных, например checkpoint. В этой таблице должны как минимум следующие столбцы:

NOT NULL При наличии этой опции будет включен режим отладки.

Эта опция заставляет сценарий сообщить о предполагаемых действиях, но не вы полнять их.

список утилит При наличии этой опции сценарий выполнит инструкцию FLUSH LOGS после бло кирования При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

Эта опция запрещает удалять существующие резервные копии по окончании работы.

Эта опция задает утилиту, используемую для копирования файлов. Аргумент имя может быть равен либо либо Эта опция запрещает копировать индексные файлы. Их можно восстановить с по мощью утилиты Эта опция задает пароль для подключения к локальному серверу.

( P порт) Эта опция задает номер порта для подключения к локальному серверу.

Эта опция подавляет вывод на экран любых данных, кроме сообщений об ошибках.

Эта опция задает шаблон для выбора баз данных. Будет создана резервная копия каждой базы данных, имя которой соответствует шаблону.

При наличии этой опции сценарий выполнит инструкцию RESET MASTER после блокирования таблиц.

При наличии этой опции сценарий выполнит инструкцию RESET SLAVE после блокирования таблиц.

322 Глава Утилиты командной строки ( S файл) Эта опция задает путь используемому для подключения к локальному серверу.

Эта опция задает суффикс имени архивного каталога (по умолчанию имя) Эта опция задает имя указываемое при подключении к базе данных.

Эта утилита представляет собой оболочку инструкции LOAD DATA INFILE. Син таксис ее вызова таков:

mysqlimport I с I С] I конфигурация] | force I I | узел] | | lock tables | 1] | | Р | | s] \ S файл] | имя] V] Утилита импортирует записи в таблицы. Необходимо указать базу данных и как минимум один текстовый файл. На основании имени файла утилита определяет имя таблицы, в которую импортируются данные.

Эта опция задает каталог, в котором хранятся файлы наборов символов.

Полный список утилит ( С Эта опция позволяет задать подмножество столбцов или переупорядочить их.

Столбцам, имена которых отсутствуют в будут присвоены значения по умол чанию. Строки импортируемого файла могут иметь слишком мало или слишком много полей, но утилита обычно справляется с этим. Пропущенным полям также присваи ваются стандартные значения.

( C) При наличии этой опции утилита будет сжимать данные, передаваемые от клиента к серверу.

конфигурация) Эта опция заставляет утилиту записывать отладочную информацию в указанный журнальный файл. Поддержка данной опции должна быть включена в утилиту на эта пе компиляции. По умолчанию данные записываются в файл trace.

Подробнее о формате журна льных файлов рассказывается в главе 24, "Физическое хранение данных".

При наличии этой опции таблица будет очищена перед импортом данных.

Эта опция задает символ, применяемый для выделения полей.

Эта опция задает символ, применяемый для отмены специального назначения управляющих символов.

Эта опция задает символ, применяемый для выделения строковых полей.

Эта опция задает символ разделитель полей.

Эта опция заставляет утилиту продолжать процесс заполнения таблиц даже в слу чае возникновения ошибки.

При наличии этой выдается описание синтаксиса командной строки, а все остальные опции игнорируются.

324 Глава Утилиты командной строки узел) Эта опция задает узел, к которому попытается подключиться утилита. В качестве аргумента может присутствовать доменное имя или IP адрес.

Эта опция заставляет утилиту игнорировать входные записи, которые дублируют существующие записи.

Эта опция задает символ разделитель строк.

( L) Обычно текстовые файлы открываются в файловой системе сервера. При нали чии данной опции файлы загружаются из клиентской системы.

( I) Эта опция заставляет утилиту блокировать все таблицы базы данных перед тем, как начинать процесс вставки записей.

Эта опция задерживает процедуру импорта до тех пор, пока не будут завершены все операции чтения таблиц.

[=пароль] Эта опция задает пароль для подключения к серверу. При ее отсутствии пароль не посылается. Если же пароль не указан, программа попросит его ввести. Учтите, что пароль, вводимый в командной строке, могут увидеть другие пользователи, ривающие список процессов. Обратите также внимание на то, что между названием короткой версии опции и паролем не нужен пробел.

( P порт) Эта опция переопределяет стандартный номер порта, с которым работает утилита (по умолчанию — 3306).

Эта опция заставляет утилиту замещать существующие записи записями импорти руемого файла.

Эта опция подавляет вывод на экран любых данных, кроме сообщений об ошибках.

Полный список утилит ( S файл) Эта опция переопределяет стандартный используемый для подключения к серверу. Обычно файл называется sock.

имя) Эта опция задает имя пользователя, указываемое при регистрации на сервере.

Эта опция заставляет утилиту выдавать более подробные комментарии.

( V) При наличии этой опции возвращается лишь информация о версии утилиты.

Эта утилита представляет собой оболочку инструкций SHOW DATABASES, SHOW TABLES и SHOW COLUMNS. Синтаксис ее вызова таков:

mysqlshow I С] I конфигурация] | | узел] keys | | | | файл] I | файл] I v] | V] [таблица Утилита возвращает информацию о базах данных и таблицах. При отсутствии ар гументов будет выдан список баз данных. Если указано имя базы данных, утилита вер нет список содержащихся в ней таблиц. В имени таблицы могут присутствовать мета символы что позволяет фильтровать список таблиц.

Если указана отдельная будет выдана информация о ее столбцах. В спе цификации столбца тоже могут стоять метасимволы.

Эта опция задает каталог, в котором хранятся файлы наборов символов.

( C) При наличии этой опции утилита будет сжимать данные, передаваемые от клиента к серверу.

326 Глава Утилиты командной строки конфигурация) Эта опция заставляет утилиту записывать отладочную информацию в указанный журнальный файл. Поддержка данной опции должна бытьвключена в утилиту на эта пе компиляции. По умолчанию данные записываются в файл trace.

Подробнее о формате журнальных файлов рассказывается в главе 24, "Физическое хранение данных".

При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются, узел) Эта опция задает узел, к которому попытается подключиться утилита. В качестве аргумента может присутствовать доменное имя или IP адрес.

При наличии этойопции выдается информация об индексах таблиц.

[=пароль] Эта опция задает пароль для подключения к серверу. При ее отсутствии не посылается. Если же пароль не указан, программа попросит его ввести. Учтите, пароль, вводимый в командной строке, могут увидеть другие пользователи, просмат ривающие список процессов. Обратите также внимание на то, что между названием короткой версии опции и паролем не нужен пробел.

( P порт) Эта опция переопределяет стандартный номер порта, с которым работает утилита (по умолчанию — 3306).

( S файл) Эта опция переопределяет стандартный используемый для подключения к серверу. Обычно файл называется sock.

При наличии этой опции выдается дополнительная информация о таблицах.

файл) Эта опция задает имя пользователя, указываемое при регистрации на сервере.

Эта опция заставляет утилиту выдавать более подробные комментарии.

Полный список утилит ( V) При наличии этой опции возвращается лишь информация о версии утилиты.

Эта утилита упаковывает таблицы ISAM точно так же, как это делает утилита в отношении таблиц Эта утилита возвращает описание числового кода ошибки. Формат ее вызова таков:

реггог I | I I | I | V] С помощью утилиты реггог можно преобразовывать коды ошибок в сообщения об ошибках (листинг 14.15).

реггог Error code 1: Operation not permitted Error code 2: No such file or directory Error code 3: No such process Error code Interrupted system call Error code 5: Input/output error При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

При наличии этой опции будет выдано лишь описание ошибки.

—verbose Эта опция заставляет утилиту выдавать более подробные комментарии.

( V) При наличии этой опции возвращается лишь о версии утилиты.

328 Глава Утилиты командной строки replace Эта утилита предназначена для замены строк в текстовых файлах. Ее синтаксис таков:

replaced | шаблон замена [шаблон файл Утилита меняет одну строку на другую. Можно задавать сразу несколько команд замены. По умолчанию текст читается из потока и записывается в поток но опция — позволяет указывать список файлов для замены.

В табл. 14.5 описаны специальные коды, используемые в шаблонах.

Код Описание \ Начало строки Конец строки \Ь Пробел, начало строки или конец строки В листинге 14.16 обычные SQL комментарии заменяются комментариями в стиле MySQL.

replace I При наличии этой опции выдается лишь описание синтаксиса командной строки, а все остальные опции игнорируются.

S Эта опция подавляет вывод на экран любых данных, кроме сообщений об ошибках.

V Эта опция заставляет утилиту выдавать более подробные сообщения.

Полный список утилит Этот сценарий запускает демон и контролирует его перезапуск в случае сбоя. Именно такой способ вызова программы MySQL рекомендуется в UNIX системах. Сценарий в первую очередь ищет утилиту и только если она не найдена, запускается обычный демон mysqld. Сначала поиск ведется в текущем ка а затем — в системных каталогах.

Все опции, указанные в командной строке, передаются демону MySQL. Параметры самого сценария safe_mysqld (перечислены ниже) задаются в конфигурационном файле.

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

Эта опция задает путевое имя глобального конфигурационного файла.

Эта опция задает путевое имя журнала ошибок. В него включается информация о демоне mysqld, которую сам демон не смог сообщить, например сообщения о не удачных попытках запуска.

Эта опция задает каталог, в котором находится демон mysqld или my sqld max.

Эта опция позволяет идентифицировать исполняемый файл сервера MySQL по суффиксу. Например, установка означает запуск файла mysqld max. Пустая строка соответствует демону mysqld.

Эта опция задает имя исполняемого файла в каталоге, который указан в опции no defaults Эта опция отключает конфигурационные файлы.

Эта опция задает максимальное число файлов mysqld, которые быть откры ты одновременно. Чтобы данная опция работала правильно, сценарий должен быть запущен от имени пользователя root.

БИБЛИОТЕКА ФУНКЦИЙ ЯЗЫКА С этой Типы данных Клиентские функции Функции работы с массивами Функции работы с наборами символов Функции работы с файлами Функции обработки ошибок Функции работы с Функции работы со списками Функции управления памятью Функции работы с опциями Функции обработки паролей Функции обработки строк Функции работы с потоками состав MySQL входит и библиотека функций языка С. Она предназначена для написания программ, взаимодействующих с сервером баз данных. В сочетании с библиотекой эта библиотека используется большинством ути лит дистрибутива MySQL. Библиотеки других языков представляют собой оболочки библиотеки языка С.

Клиентская библиотека содержит также универсальные функции обработки мас сивов и строк, упрощающие взаимодействие с сервером. Их списки приведены в кон це главы.

Типы данных В клиентской библиотеке определен ряд типов данных. Большинство соответст вующих структур объявлено в файле Существуют также функции, предназначенные для извлечения информации из этих структур.

MYSQL \ Эта структура описывает сеанс подключения к серверу баз данных. Ее поля пере числены в табл. 15.1.

Поле Хранимая NET net Параметры взаимодействия Дескриптор файла для протокола SSL char *host Адрес узла 332 Глава Библиотека функций языка С Поле Хранимая информация char *user Имяпользователя char *passwd Пароль char *unix_socket Путевое имя char *server_version Версия сервера char *host_info Строка вида via UNIX socket" char После выполнения запроса: строка ви да "Rows matched: 2 Changed: О" char *db Имя стандартной базы данных unsigned port Порт TCP/IP unsigned int Клиентские флаги unsigned int server_capabilities Параметры сервера unsigned int protocol_version Версия протокола unsigned int ield_count Число полей в последней таблице ре зультатов запроса unsigned int server_status Статус сервера unsigned long thread_id Идентификатор потока my_ulonglong Число записей, участвовавших в по следнем запросе my_ulonglong insert_id Идентификатор последней записи, при вставке которой было увеличено значение поля счетчика Значение, используемое утилитой unsigned long packet_length Длина пакета в байтах mysql_status status Одно из следующих значений:

MYSQL_STATUS_READY, MYSQL STATUS USE RESULT Типы данных Поле Хранимая информация fields Массив с описаниями полей таблицы результатов MEM_ROOT field_alloc Буфер полей True при вызове функции my_bool reconnect True, если соединение должно вос станавливаться в случае разрыва struct st_mysql_options options Различные включая установки протокола SSL char [9] Случайная строка, посылаемая серве ром при установлении соединения struct charset_info_st *charset Название стандартного набора символов unsigned server_language Язык сервера Эта структура описывает находящиеся в таблице результатов запроса (табл. 15.2).

Поле Хранимая информация rows Число строк в таблице результатов unsigned int fields Число столбцов в таблице результатов Записи таблицы MEM_ROOT Резидентный буфер В этой структуре содержится информация о столбце таблицы (табл. 15.3). В струк туру MYSQL входит массив структур MYSQL_FIELD, описывающих поля таблицы 334 Глава Библиотека функций языка С Поле Хранимая char Имя столбца char *table Имя таблицы char *def Значение по умолчанию ield_types type Тип (табл. 15.4) unsigned length Размерность unsigned int max_length Максимальная размерность выбранного на бора записей unsigned int Флаги unsigned int decimals Число десятичных значений FIELD_TYPE_BLOB FIELD_TYPE_DATE FIELD_TYPE_DATETIME FIELD_TYPE_DOUBLE FIELD_TYPE_ENUM FIELD_TYPE_FLOAT FIELD_TYPE_LONG FIELD_TYPE_LONGLONG FIELD_TYPE_LONG_BLOB FIELD_TYPE_NULL FIELD_TYPE_SET FIELD_TYPE_SHORT FIELD_TYPE_STRING FIELD TYPE Типы данных FIELD_TYPE_TINY FIELD_TYPE_TINY_BLOB FIELD_TYPE_VAR_STRING FIELD TYPE YEAR В этой структуре хранится номер поля записи. Нумерация полей начинается с нуля.

Эта структура описывает таблицу результатов запроса (табл. 15.5).

Поле Хранимая информация my_ulonglong row_count Число строк в таблице результатов unsigned field_count Число столбцов в таблице результатов unsigned int current_f Внутренний указатель на столбец * Массив с информацией о столбцах *data Массив записей MYSQL_ROWS *data_cursor Указатель текущей записи MEM_ROOT field_alloc Резидентный буфер MYSQL_ROW row Описание текущей записи в случае режима не буферизованного чтения current_row Запись, находящаяся в буфере unsigned long *lengths Массив длин текущих столбцов MYSQL *handle Дескриптор сеанса для режима небуферизо ванного чтения Маркер для etch_row 336 Глава Библиотека функций языка С В этой структуре хранится содержимое одной записи таблицы.

Эта структура описывает набор записей.

my_ulonglong Это целое число, используемое для подсчета количества записей, а также в качестве значения поля счетчика. Оно определено как unsigned long long Клиентские функции В этом разделе описаны функции, используемые для взаимодействия с базой данных.

Эта функция определяет количество строк, участвовавших в последнем запросе указанного сеанса. Ее прототип таков:

*mysql) Для операций обновления (UPDATE), удаления (DELETE) и вставки (INSERT) воз вращается число измененных строк. Для операций выборки (SELECT) возвращается число строк в таблице результатов запроса.

В листинге демонстрируются обновление нескольких записей и последующая проверка их числа с помощью функции ected_rows ttinclude main(int char MYSQL char *query "UPDATE book SET Подключение к серверу.

Клиентские функции "test", О, NULL, "Failed to connect to database. Error:

exit Обновление нескольких записей.

"Query failed:

else titles Закрытие соединения.

mysql_change_user() Эта функция меняет пользователя и базу данных текущего сеанса. В случае успеш ного завершения возвращается нуль, иначе — код ошибки (перечислены далее в табл. 15.8). Прототип функции таков:

MYSQL *mysql, const char *user, const char *passwd, const char *db) Аргумент — это описание соединения, возвращаемое функцией real_connect Значения аргументов user и password должны соответствовать реальному имени пользователя и паролю в таблицах привилегий. Последний аргу мент является необязательным.

В листинге 15.2 функция не разрывая соединение с сер вером, отменяет какую либо ассоциацию с пользователем или базой данных.

338 Глава Библиотека функций языка С char MYSQL Подключение к серверу под видом обычного It "test", 0, NULL, "Failed to connect to database. Error:

Удаление привязки к пользователю без разрыва соединения.

NULL, NULL, "Failed to change user. Error:

Закрытие соединения.

Эта функция возвращает название стандартного набора символов в данном сеансе:

const char * Применение функции демонстрируется в листинге 15.3.

Клиентские функции char MYSQL Подключение к серверу под видом обычного "test", 0, NULL, 0» "Failed to connect to database. Error:

exit Выдача информации о сервере и set:

Version:

Info:

Version:

Version:

Info:

Safe:

Закрытие соединения.

mysql_close() Эта функция разрывает соединение с сервером и очищает память, связанную с се ансом:

void *mysql) 340 Глава Библиотека функций языка С Эта функция является устаревшим аналогом функции MYSQL const char *host, const char const char *passwd) Использовать ее не рекомендуется.

mysql_create_db() Эта устаревшая функция создает базу данных, имя которой указано во втором гументе:

*mysql, const char *db) Использовать эту функцию не рекомендуется. Лучше посылать инструкцию CREATE DATABASE с помощью функции mysql_data_seek() Эта функция перемещает внутренний указатель на требуемую запись в буфере ре зультатов:

void *result, row) Применяя функцию совместно с можно считывать произвольную запись таблицы результатов. Перед обращением к данной функции необходимо вызвать функцию mysql_store_result вание перечисленных функцийдемонстрируется влистинге 15.4.

#include int char MYSQL MYSQL_RES row;

char *query "SELECT State FROM tax ORDER BY State";

0, NULL, Извлечение информации из tax.

Клиентские функции "Query failed:

else Занесение результатов в буфер.

result Переход на пятнадцатую raysql_data_seek(result,14);

Выборка записи.

row = Отображение названия штата.

...

mysql_debug() Эта функция включает режим отладки:

void char *debug) Ей требуется передать строку формата наподобие 0, trace либо пустую строку. Во втором случае используется переменная среды MYSQL_DEBUG.

Чтобы эта функция была необходимо скомпилировать клиентскую библио теку с включением средств отладки.

В MySQL применяется библиотека функций отладки Фреда Фиша (Fred Fish).

О ней рассказывается в главе 31, "Расширение возможностейMySQL".

Эта устаревшая функция полностью удаляет указанную базу данных и все ее таблицы:

raysql_drop_db(MYSQL const char Вместо нее рекомендуется инструкцию DROP DATABASE с помощью функции 342 Глава Библиотека функций языка С Эта функция заставляет сервер записывать отладочную информацию в журналь ный файл:

mysql_eof() Эта устаревшая функция проверяет, достигнут ли конец результирующего набора записей:

my_bool *res) Вместо нее предпочтительнее пользоваться mysql_fetch_row mysql_errno() Эта функция возвращает код ошибки последней операции:

*mysql) Если ошибок не было, возвращается нуль. Список кодов ошибок и соответствую щих им сообщений приведен в приложении Г, "Коды ошибок MySQL".

В листинге 15.5 будет выдано следующее сообщение:

Query failed: (1064) You have an error in your SQL syntax near at #include int char MYSQL 0, NULL, Попытка выполнить неправильный запрос.

"SELECT FROM "Query failed: (%d) функции mysql_error() Эта функция воз вращает об ошибке, соответствующее последней опе рации:

char * *mysql) Если ошибок не возвращается пустая строка. Список кодов ошибок и ветствующих им сообщений приведен в приложении Г, "Коды ошибок MySQL". При мер использования функции приводился в листинге 15.5.

Эта устаревшая функция добавляет к заданной строке символы обратной косой черты, что позволяет использовать строку в SQL инструкциях:

char *to, const char ulong length) Эта функция игнорирует сведения о наборе символов. Вместо нее лучше пользо ваться mysql_real_escape_string Эта функция извлекает информацию о столбцах таблицы результатов, по одному MYSQL_FIELD * В MySQL хранится внутренний указатель на текущий столбец. Этот указатель изме няется после каждой следующей операции выборки столбца. Когда столбцов не ся, возвращается NULL. Указатель сбрасывается в момент поступления нового запроса.

Его можно также изменять вручную с помощью функции ield_seek Функция возвращает структуру MYSQL_FIELD, описание которой было приведено выше. В режиме небуферизованного чтения размерность столбцов типа BLOB устанавливается равной 8 Кбайт, а не реальной размерности. Ес ли же результаты запроса заносятся в буфер, учитывается размерность самого боль шого значения столбца.

В листинге 15.6 с помощью функции отображается ин формация о каждом столбце таблицы tax.

char MYSQL 344 Глава Библиотека функций языка MYSQL_RES MYSQL_FIELD 0, NULL, "SELECT * FROM result Получение информации о столбцах.

Value:

Эта функция возвращает структуру с информацией о заданном столбце таблицы результатов:

MYSQL_FIELD * Нумерация столбцов начинается с нуля. В остальном данная функция аналогична функции ield Эта функция извлекает информацию обо всех столбцах таблицы результатов и возвращает массив структур MYSQL_FIELD * *res) Определить общее количество столбцов в таблице позволяет функция mysql_ ields Программа, представленная в листинге 15.7, выводит данные о каж дом элементе массива столбцов.

#include ttinclude char Клиентские функции MYSQL MYSQL_RES row;

MYSQL_FIELD unsigned unsigned long unsigned int 0, NULL, 0) "SELECT * FROM result row Получение информации о lengths field i i++) Value:

Эта функция возвращает массив, в котором указана размерность каждого столбца текущей * *res) Функция предпочтительнее, чем так как по следняя неправильно определяет длину двоичной строки. В случае ошибки, вызван ной наличием неправильного указателя, возвращается NULL.

Пример использования данной функции приводился в листинге 15.7.

Эта функция извлекает следующую запись из указанного набора:

*res) При достижении конца набора в режиме буферизованного чтения возвращается NULL. В небуферизованном режиме значение NULL является как признаком конца на 346 Глава Библиотека функций языка С бора, так и признаком ошибки. В этом случае необходимо проверить наличие ошибки с помощью функции mysql_errno Возвращаемое значение можно трактовать как массив значений столбцов. Их чис ло определяет функция а функция находит длину каждого столбца.

В листинге 15.8 запрашиваются значения трех столбцов таблицы user. Обратите внимание на функцию во внутреннем цикле. В ней проверяется реальная длина каждого столбца. С помощью оператора значения NULL преобразуются в строку "NULL". Указатель, содержащийся в массиве row, будет равен NULL, если зна чение в столбце отсутствует. Если же столбец соде ржит пустую строку, в массиве row будет находиться указатель на пустую строку.

#include char MYSQL mysql;

row;

MYSQL_FIELD unsigned int unsigned long unsigned int i;

char "root", "mysql", 0, NULL, "SELECT Host, User, Password FROM result Просмотр lengths i i++) (int) row[i] row[i] Клиентские функции mysql_field_count() Эта функция определяет количество столбцов, участвовавших в последней опера ции заданного сеанса:

unsigned *mysql) Схожие действия выполняет функция которая в качестве аргумента принимает указатель на конкретную таблицу результатов.

mysql_field_seek() Эта функция перемещает внутренний указатель на заданный столбец таблицы ре зультатов:

MYSQL_RES MYSQL_FIELD_OFFSET Первый столбец имеет нулевое смещение. Функция возвращает предыдущее зна чение указателя.

mysql_field_tell() Эта функция возвращает значение внутреннего указателя полей:

*res) mysql_free_result() Эта функция освобождает память, занимаемую таблицей результатов запроса:

void *result) По окончании работы с набором записей необходимо всегда освобождать память.

Эта функция определяет версию клиентской библиотеки, с которой ведется работа:

char * Пример использования данной функции был приведен в листинге 15.3.

Эта функция возвращает строку, описывающую узел, с которым установлено единение:

char * Пример использования данной функции был приведен в листинге 15.3.

348 Глава Библиотека ф ункций языка С Эта функция определяет версию применяемого коммуникационного протокола:

Пример использования данной функции был приведен в листинге 15.3.

Эта функция определяет версию программы MySQL, установленной на сервере:

char * *mysql) Пример использования данной функции был приведен в листинге 15.3.

Эта функция возвращает строку с описанием записей, измененных в ходе послед него запроса:

char *mysql) Непустая строка возвращается лишь в том случае, в операции вставки (INSERT) или обновления (UPDATE) участвовала более чем одна запись. Например, если с помощью инструкции INSERT INTO в таблицу была добавлена одна запись, функция о вернет пустую строку. Н епустая строка возвращается также в случае выполнения инструкций ALTER TABLE и LOAD DATA mysql_init() Эта функция инициализирует соединение:

MYSQL * В качестве аргумента можно передать адрес существующей структуры MYSQL или NULL. Во втором случае функция выделит память под новую структуру. Для дения выделенной памяти предназначена Эта функция возвращает последнее значение поля счетчика, использовавшееся в указанном сеансе:

To же самое значение возвращается встроенной LAST_I NSERT_ID Если в последнем запросе не участвовало функция возвращает нуль.

Клиентские функции mysql_kill() Эта функция уничтожает поток, связанный с базой данных:

*mysql, Список идентификаторов потоков можно получить с помощью инструкции SHOW PROCESSES или функции В случае неудачи функция mysql_kill возвращает нуль.

mysql_list_dbs() Эта функция возвращает набор записей с именами всех баз данных:

* *mysql, const char *wild) Аргумент wild может содержать неполное имя с метасимволами и что зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW DATABASES. He забывайте, что полученный набор записей необходимо удалить с по мощью функции ree_result В листинге 15. выводится список баз данных, доступных пользователю root.

int char MYSQL mysql;

MYSQL_RES MYSQL_ROW row;

MYSQL_FIELD unsigned long "root", "mysql", 0, NULL, result Просмотр результатов.

while(row lengths (int) 350 Глава Библиотека функций языка С Эта функция возвращает набор записей с именами всех столбцов в указанной таб лице:

MYSQL_RES * MYSQL const char *table, const char *wild) Аргумент wild может содержать неполное имя с метасимволами и что по зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW COLUMNS. He забывайте, что полученный набор записей необходимо удалить с помо щью функции ree_result Эта функция возвращает набор записей с идентификаторами всех потоков:

* *mysql) Аналогичные действия выполняет инструкция SHOW Не забывайте, что полученный набор записей необходимо удалить с помощью функции mysql_ mysql_list_tables() Эта функция возвращает набор записей с именами всех таблиц указанной базы данных:

MYSQL_RES * const char *wild) Аргумент wild может содержать неполное имя с метасимволами и что по зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW TABLES. He забывайте, что полученный набор записей необходимо удалить с щью функции ree_result Эта функция определяет количество полей в указанном наборе записей:

unsigned *res) Эта функция определяет количество записей в указанном наборе:

*res) Клиентские функции mysql_options() Эта функция задает параметры соединения до как оно будет установлено:

MYSQL option, const char *arg) Функция должна вызываться после но до Она вызывается по одному разу для каждого параметра (табл. 15.6). В случае параметра функции необходимо передать указатель на беззнаковое целое число, приведенный к типу char Константа Тип аргумента Директива char * Немедленно выполнить ука занную SQL инструкцию при первом или повторном под ключении MYSQL_OPT_COMPRESS Heиспользуется Сжимать данные, переда ваемые между клиентом и сервером MYSQL_OPT_CONNECT_TIMEOUT unsigned int * Считать попытку чения неудачной по нии указанного числа секунд MYSQL_OPT_NAMED_PIPE He используется Использовать именован ные каналы в Windows NT MYSQL_READ_DEFAULT_FILE char * Прочитать установки из ука занного го файла, а не того, который задан по умолчанию (напри мер, char * Прочитать установки из ука занной группы конфигура ционного файла Благодаря функции разработчики MySQL могут добавлять к программе новые параметры соединений, не модифицируя код функции real_connect Пример задания параметров приведен в листинге 352 Глава Библиотека функций языка С char MYSQL mysql;

MYSQL_RES unsigned long Задание параметров соединения.

MYSQL_OPT_COMPRESS, (char "SET "root", "mysql", 0, NULL, 0) result lengths (int) (result) Эта функция проверяет наличие связи с сервером и в случае необходимости по вторно устанавливает соединение:

int *mysql) Эта функция выполняет указанный запрос в рамках заданного сеанса:

int *mysql, const char *query) Клиентские функции Она представляет собой оболочку функции mysql_real_query вызывая функ цию для определения длины запроса. Если в запросе содержится двоичная строка, необходимо обратиться к функции сооб щив ей реальную длину запроса.

Функция mysql_query выполняет одиночный запрос. Символ точки с запятой в конце строки не нужен. За этой функцией должен следовать вызов функции mysql_store_result В случае успешного выполнения запроса функция возвращает нуль, иначе — нену левое значение. Применение этой функции демонстрируется во многих примерах данной главы.

Эта функция извлекает результаты запроса, посланного ранее функцией *mysql) В случае успешного выполнения запроса функция возвращает нуль, иначе — код ошибки.

С помощью этих двух функций — и query — можноорганизовать обработку запросов в фоновом режиме.

сылается серверу, и пока этот запрос обрабатывается, выполняются другие действия (листинг 15.11).

ttinclude int char MYSQL MYSQL_RES const char *query "SELECT * FROM user";

*lengths;

0, NULL, 0) Отправка query, Имитация других действий.

354 Глава Библиотека функций языка С Получение результатов запроса.

result lengths i++) Эта функция устанавливает соединение с сервером MySQL:

MYSQL * MYSQL const char *host, const char *user, const char *passwd, const char *db, port, const char *unix_socket, uint client_flag) Она заменяет функцию mysql_connect использовавшуюся в предыдущих вер сиях MySQL. Как минимум, ей необходимо передать структуру MYSQL, функцией mysql_init Остальные аргументы можно задать равными NULL. В качестве аргумента host может присутствовать доменное имя или IP адрес.

Значение NULL соответствует локальному узлу. Функция пытается подключиться к ло кальному узлу, используя или именованные каналы, если они поддерживаются в операционной системе. Если указан IP адрес, соединение устанавливается по прото колам Значение NULL в качестве имени пользователя соответствует текущему пользова телю, запустившему программу. Пароль предоставляется в незашифрованном виде (функция сама выполняет шифрование). Если аргумент равен NULL, пароль будет пустым.

Клиентские функции Аргумент определяет стандартную базу данных. Аргумент port задает номер та TCP/IP. В случае нулевого значения будет использован стандартный порт 3306.

гумент unix_socket должен содержать путь к файлу или именованного канала.

Аргумент client_flag представляет собой битовое поле, в котором задаются различные опции (табл. 15.7). Некоторые из них перекрывают опции, заданные в функции Константа Директива Сжимать данные, передаваемые между клиентом и вером Сообщать число найденных записей, а не число изме ненных записей CLIENT_IGNORE_SPACE Разрешить пробелы между именем функции и откры вающей скобкой CLIENT_INTERACTIVE Разрывать соединение по истечении интервала тайм аута, заданного в переменной a wait timeout He разрешать синтаксис Работать с клиентом по протоколу ODBC CLIENT_SSL Шифровать соединение с помощью протокола SSL В табл. 15.8 перечислены коды ошибок, генерируемые функцией connect В случае успешного завершения функция возвращает указатель на структу ру, содержащую описание соединения. При возникновении ошибки возвращается NULL.

Константа Описание Команды выполнялись в неправильном порядке CR_SERVER_GONE_ERROR Сервер не отвечает Во время выполнения запроса пропала связь с сервером ошибка ER_ACCESS_DENIED_ERROR Имяпользователя или пароль неверны ER_BAD_DB_ERROR Имя базыданных не распознано Пользователю отказано в доступе Команда не реализована Имя базы данных слишком длинное 356 Глава Библиотека функций языка С Применение функции mysql_real_connect демонстрируется во многих при мерах данной главы.

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

( MYSQL char *to, char ulong length) Функция извлекает строку из аргумента и помещает ее преобразованную вер сию в аргумент to. Преобразование осуществляется с учетом используемого набора символов. Функция возвращает количество символов в полученной строке.

Аргумент to должен указывать на в котором уместится преобразованная строка. Худший случай — это когда придется защищать от интерпретации каждый символ. Кроме того, добавляется еще и символ конца строки, поэтому к удвоенному размеру исходной строки нужно еще добавить единицу.

В листинге 15.12 функция читает аргументы ко мандной строки и заносит их в преобразованном виде в таблицу tax.

char MYSQL char char char rate char 0, NULL, 4) "Wrong number of Извлечение аргументов командной строки.

state, rate, query (char *)my_malloc (4096, "INSERT INTO %s, state, rate, 358 Глава Библиотека функций языка С Эта функция возвращает смещение последней записи, извлеченной из набора с помощью функции etch_row MYSQL ROWS * row RES *res) Эта функция задает стандартную базу данных:

const char *db) В случае успешного завершения возвращается нуль.

Эта функция посылает серверу запрос, но не ждет получения его результатов:

int mysql, const char* query, length) Результаты можно извлечь позднее с помощью функции mysql_read_query_ result С помощью этих двух функций можно организовать фоновую обработку длинных запросов, что позволит программе оперативнее реагировать на действия пользователя. Соответствующий пример приводился в листинге Эта функция останавливает работу сервера:

int mysql_ssl_cipher() Эта функция возвращает SSL шифр, используемый в указанном соединении:

char * mysql_ssl_clear() Эта функция освобождает память, выделенную функцией int *mysql) Эта функция подготавливает клиентскую программу к шифрованию соединения по протоколу SSL (Secure Sockets Layer — протокол защищенных Клиентские функции MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath) Она должна вызываться до того, как соединение будет установлено с помощью функ ции Об ошибках параметров функции общается только после того, как будет сделана попытка подключения. Память, выделяемая функцией, Чтобы функция стала доступна, необходимо включить под держку библиотеки на этапе компиляции клиентской библиотеки.

mysql_stat() Эта функция возвращает строку с описанием состояния сервера:

char * Аналогичная информация возвращается командой status.

Эта функция помещает результаты запроса во внутренний буфер:

MYSQL_RES * *mysql) Она возвращает идентификатор набора записей, который можно передавать функциям и а также ряду других функ ций. По окончании работы с набором записей его необходимо удалить с помощью функции ree_result Применение функции демонстрируется во многих при мерах данной главы.

Эта функция возвращает идентификатор клиентского потока:

Данный идентификатор появится в списке, который возвращается инструкцией SHOW PROCESSLIST. Его (идентификатор) можно передать функции чтобы разорвать соединение с сервером. В случае повторного подключения к серверу идентификатор потока меняется.

mysql_thread_safe() Эта функция возвращает 1, если на этапе компиляции в клиентскую библиотеку были включены средства поддержки безопасной работы потоков:

360 Глава Библиотека функций языка С Эта функция возвращает идентификатор набора записей, не находящегося в бу фере:

MYSQL_RES * *mysql) Работая с набором записей данного типа, клиентская библиотека извлекает по од ной записи за раз с помощью функции Применять функции к таким наборам нельзя.

Функции работы с массивами Ниже перечислены функции, предназначенные для работы с динамическими мас сивами.

byte *array) void *array) void *array, void *array) void *array, element, uint idx) *array, uint uint init_alloc, uint *array, gptr element) byte *array) *array, gptr element, uint idx) Функции работы с наборами символов Ниже перечислены функции, предназначенные для работы с наборами символов.

* char *cs_name) void STRING *s, const char *name) Функции работы с наборами символов char DYNAMIC_STRING *s) *array, struct *fb) * **table, size_t * **table, const char *name, size_t tablesz) * * char char * uint char void * flags) CHARSET_INFO * char myf void char *buf) const char * uint char char * *buf) * * char *name) my_bool simpleconfig_buf_st *fb, char *buf) 362 Глава Библиотека функций языка С my_bool char * char * **cs, **cs, const char *set, myf myflags) ***charsets, myf myflags) myf flags) char myf flags) Функции работы с файлами Ниже перечислены функции, предназначенные для манипулирования файлами и каталогами.

char * to) uint my_string to, char *from) File char *dir, char mode, myf uint char uint to, char *name) *path) static char * *to, char *name) my_string char *name) Функции работы с файлами char *dsk, char to, char flag) to, const char void to, int int File int int myf MyFlags) int myf MyFlags) my_string fd) int *fd, myf MyFlags) FILE * char int Flags, myf MyFlags) FILE * int Flags, myf MyFlags) byte *Buffer, uint Count, myf MyFlags) *stream, int whence, myf my_off_t *stream, myf MyFlags) uint *stream, byte *Buffer, uint Count, myf MyFlags) int uint size, myf MyFlags) to, char *path, char File *FileName, int Flags, myf MyFlags) my_string to, char *progname, char uint 364 Глава Библиотека языка С byte *Buffer, Count, File char *FileName, uint myf MyFlags) *dir, myf MyFlags) uint Filedes, byte *Buffer, uint Count, myf MyFlags) void to, char *from) void *dir) int *dir_name) uint to, char to, char uint to, char *from) void to) int *str, char *wildstr) Функции обработки ошибок Ниже перечислены функции, предназначенные для обработки ошибок и выдачи сообщений об ошибках.

int myf MyFlags, int error, char *str, myf MyFlags) int (uint error, char myf MyFlags, Функции работы Функции работы с хэш таблицами Перечисленные ниже функции реализуют в которой нет переполне ния страниц и пустых слотов. Кроме того, она защищена от проблем фрагментации.

my_bool *hash) *hash, byte *record) byte * *hash, void *hash) *hash, uint size, uint uint key_length, get_key, void uint flags) my_bool *info, const byte *record) byte * const byte *record, uint *length, first) uint uint uint const byte *key, uint length) uint *pos, uint buffmax, uint maxlength) gptr *hash, const byte *key, uint length) my_bool *hash, byte *record, byte *old_key, uint old_key_length) Функции работы со списками Ниже перечислены функции, предназначенные для работы с двухсвязными спи сками.

LIST * list *root, LIST 366 Глава Библиотека функций языка С LIST * *data, LIST *list) LIST * *root, LIST *element) void *root, free_data) *list) LIST * *list, list_walk_action action, argument) Функции управления памятью Ниже перечислены функции, предназначенные для управления памятью.

gptr unsigned int Size) void *dst, uint old_length, char *src, uint uint tot_length) void *dst, *src, uint void *dst, char *src, uint len) void *root, void uint block_size, uint pre_alloc_size) char * *root, char *str, uint len) byte * *packet, *len, gptr int Size, myf MyFlags) gptr void Функции работы с опциями gptr Size, void gptr Size, myf MyFlags) *from, myf MyFlags) char * *root, char *str) Функции работы с опциями Перечисленные ниже функции предназначены для управления к онфигурацион ными файлами.

void **argv) void char *conf_file, const char **groups, int *argc, char ***argv) void char *conf_file, const char **groups) my_bool *args, MEM_ROOT *alloc, const char *dir, const char const char *ext, Функции обработки паролей Следующие две функции предназначены для работы с паролями.

char * *opt_message) void *to, const char Функции обработки строк Ниже перечислены функции, манипулирующие включая функции пре образования строк в данные других типов.

368 Глава Библиотека функций языка С *str) void length) void str) void str, uint length) void str) *str, char *append) *str, char *append, uint length) void *str) *str, ulong additional_size) my_bool *str, char *init_str) my_bool *str, const char uint init_alloc, uint char * char *dst, radix) char * int val, char *dst, int radix) int *s, char *t) char * value, char *buff) char * val, char *dst, int radix) int char *s, const char *t, uint my_bool *packet, ulong *len, ulong void Функции обработки строк in_addr in, char *buf) char * char *dst, radix) char * int val, char *dst, int radix) int char *s, const char *t, int char *s, uint s_len, const char *t, uint t_len) char *str, const char *search) int char *s, const char *t) int char *s, const char *t) (byte *packet, *len, char * const char *src, register int radix, long int lower, long int upper, long int *val) char * const char *s, register strcont(regl const char *str, reg2 const char *set) char * const char *s) uint len, pchar fill) uint *str, char char * *dst, char *src, uint length) char * *dst, char *src) uint *s, uint char * *dst, char *src, uint 370 Глава Библиотека функций языка С char * *src, char **ptr, base) char * *src, char **ptr, int base) char * *src, char **ptr, int base) char * *src, char **ptr, int base) char * *dst, const char *src, Функции работы с потоками Ниже перечислены функции, реализующие потоки, а так же исключающие семафоры void *attr, int priority) int thread_id) void * key) void thread_id, int prior) int *cond, safe_mutex_t struct char *file, line) int *cond, char *file, uint line) int char *file, uint line) int const *attr) int char *file, uint line) int safe char *file, uint line) int my *set, int *sig) КЛИЕНТОВ MYSQL части рассматриваются вопросы написания приложений, взаимодействующих с сервером MySQL. Для этих целей в MySQL есть базовая библиотека функций языка С. Модули других языков либо ставят этим функциям в соответствие свои локальные функции, ли бо создают для них Все содержащиеся в данной части главы коротки и конкретны. Предполагается, что читатели имеют опыт программирования на соответствующем языке.

В главе 16, "Использование библиотеки языка С", рассматривается цедура написания приложений, непосредственно работающих с функциями языка С. В главе 17, рассказывается о программировании ний на языке с использованием интерфейса JDBC. В главе 18, "VBScript и ODBC", описывается процесс создания с применением технологии ASP и интерфейса ODBC. В главе 19, речь идет о созда нии на языке РНР. В главе 20, рассматриваются язык Perl и библиотека DBI. В главе "Python", описываются язык Python и его модуль В главе 22, "Библиотека описывается лиотека функций языка C++, которая называется ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ ЯЗЫКА С этой Подготовка программы Извлечение данных Изменение этой главе рассказывается о том, как писать программы на языке С, взаимодей ствующие с сервером MySQL. Собственно программирование на языке С выхо дит за рамки данной книги. Предполагается, что читатели имеют опыт написа ния и компиляции таких программ. Программы для MySQL можно компилировать в большинстве версий UNIX и Windows.

Функции библиотеки языка С рассматривались в главе 15, функций языка Подготовка программы работе с клиентской библиотекой MySQL необходимо включить в программу файл а затем подключить файл библиотеки на этапе компоновки. Файлы за головков обычно находятся в каталоге а ные в каталоге Для подключения библиотеки ука жите в командной строке компилятора ключ Если компилятор не находит файлы заголовков, воспользуйтесь опцией а если не найден файл библиотеки — опцией L. Ниже показана команда компиляции тестового клиента в системе, где программа MySQL инсталлирована в стандартные каталоги.

дсс о Imysqlclient Естественно, в более сложных случаях необходимо создавать В Windows файл lib представляет собой оболочку динамической теки lib.

Статическая версия библиотеки называется Любая клиентская программа, прежде чем подключаться к серверу, должна в пер вую очередь инициализировать структуру MYSQL, содержащую описание соединения.

Это делает функция Она принимает указатель на существующую структуру или самостоятельно выделяет для нее память. По окончании сеанса необ ходимо освободить память с помощью функции Со структурой MYSQL работают многие функции библиотеки языка С.

376 Глава Использование библиотеки языка С После инициализации сеанса необходимо подключиться к серверу с помощью функции Все ее аргументы, кроме структуры MYSQL, явля ются необязательными. На место отсутствующих параметров подставляются значе ния по умолчанию. Например, в UNIX клиент по умолчанию подключается к узлу через локальный Для регистрации на сервере используется имя те кущего пользователя.

Перед подключением можно задать различные параметры сеанса с помощью функ ции mysql_options а также подготовить программу к шифрованию соединения, вызвав функцию В ходе самого сеанса разрешается выполнять извольное число запросов. В конце сеанса вызывается функция В листинге 16.1 показана программа, которая не делает ничего по лезного, а лишь подключается к серверу, придерживаясь стандартных установок.

#include char MYSQL Инициализация соединения.

Подключение к Сазе данных со стандартными установками.

NULL, NULL, NULL, NULL, 0, NULL, Закрытие соединения.

Извлечение данных После к серверу можно посылать ему запросы с помощью функций mysql_query и mysql_send_query Первая из них определяет длину переданной ей строки запроса с помощью функции поэтому в запрос не могут входить строки, содержащие символы NUL (ASCII код О).

Это ограничение легко обойти. Достаточно вызвать функцию string которая защитит все специальные символы от интерпретации.

При использовании функций и клиент по сылает серверу запрос и ждет, пока сервер не вернет его результаты. Если запрос вы полняется слишком долго, вызовите функцию которая Извлечение данных вит запрос и немедленно завершится. Получить результаты можно будет позднее с помощью функции Но не ждите слишком долго, по скольку сервер может разорвать соединение по истечении тайм аута. Эти функции для того, чтобы можно запустить медленный запрос в фоновом режиме и продолжить реагировать на действия пользователя.

Инструкция SELECT и ряд других инструкций, в частности SHOW PROCESSLIST, возвращают результаты запроса в виде набора записей. Клиент может поместить весь набор в буфер или извлекать по одной записи за раз.Работа с буфером ведется чуть быстрее, но необходимо иметь достаточный объем памяти, чтобы занести в буфер все записи. Функция mysql_store_result помещает результаты запроса в буфер, а функция mysql_use_result подготавливает программу к режиму небуферизо ванного чтения.

В любом случае отдельные записи извлекаются с помощью функции За один вызов возвращается одна запись. Тип Это представление строки таблицы. Если записи находятся в буфере, можно воспользоваться функцией mysql_data_seek для перехода к про извольной записи. В режиме небуферизованного чтения менять внутренний указа тель записей нельзя.

Функция позволяет определить число записей в наборе, но в большинстве случаев просто вызывают функцию etch_row до тех пор, пока она не вернет значение NULL. Если при последующем вызове функции возвращается нуль, значит, достигнут конец набора записей.

В листинге 16.2 показана простая программа, которая извлекает данные из табли цы user. Обратите внимание на то, что программа пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете эксперимен тировать с этой программой, подставьте корректные значения имени пользователя и пароля.

char MYSQL MYSQL_RES row;

Инициализация "Unable to initialize MYSQL 378 Глава Использование библиотеки языка С Подключение к базе "root", "password", NULL, Передача запроса серверу.

"SELECT User, Host FROM user ORDER BY Запрос завершился else Занесение результатов в буфер, подсчет числа полей.

result = lengths 0;

i++) row[i] row[i] Освобождение буфера.

Закрытие соединения.

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

Запись представляет собой массив полей, нумерация которых начинается с нуля. Если необходимо определить типы полей, воспользуйтесь функцией mysql_fetch_ В цикле while из таблицы результатов последовательно извлекаются записи.

Функция etch_lengths определяет размерность каждого столбца. Это не та размерность, которая указана в определении столбца, а реальная длина строки, со держащейся в соответствующей ячейке. Функция etch_lengths чрезвы чайно удобна, поскольку с помощью функции нельзя определять длину двоичных строк.

В цикле for функция отображает значение каждой ячейки. Обратите внимание на спецификацию в строке формата. Она заставляет функцию искать в списке аргументов целое число, задающее размерность строкового аргумента. Благо даря этому пропадает необходимость завершать каждую строку символом NUL.

Запись, возвращаемая функцией etch_row представляет собой массив указателей на строки. В случае пустой строки элемент массива ссылается на строку, которая начинается с символа NUL, а функция etch_lengths сообщает о том, что длина такой строки равна нулю. Если же столбец содержит значение NULL, то в массиве будет находиться пустой указатель. С помощью оператора такому указа телю ставится в соответствие строка Изменение данных Запросы на вставку или обновление данных не возвращают наборы записей. Они тоже выполняются с помощью функции mys ql_query но вызывать функцию нет необходимости. Если требуется узнать число добавлен ных или измененных записей, воспользуйтесь функцией ected_rows (листинг 16.3).

#include char MYSQL char 380 Глава Использование библиотеки языка С Вставляемые const char "Leon", "Vicky", "Carl", "Ricky", "Jeff", "Bob", "Tina", "Joey" rows Запросы.

const char *query_create "CREATE TABLE (\ ID NOT NULL AUTO_INCREMENT, \ Name \ PRIMARY const char *query_insert "INSERT INTO testapi (Name) VALUES const char *query_delete "DELETE FROM testapi WHERE ID const char "UPDATE testapi SET Name WHERE const char *query_drop "DROP TABLE testapi";

Инициализация соединения.

"Unable to initialize MYSQL exit Подключение к базе данных.

NULL, NULL, "test", 0, NULL, Создание таблицы.

Запрос завершился Изменение данных "Could not create Вставка записей.

i++) query_insert, Запрос завершился "Could not insert query, row Удаление записей.

Запрос завершился "Could not delete rows Обновление Запрос завершился "Could not update 382 Глава Использование библиотеки языка С rows Удаление таблицы.

Запрос завершился "Could not drop * * Закрытие Программа, представленная в листинге создает таблицу и добавляет в нее за писи. Далее происходит удаление части записей, обновление записи и, наконец, уда ление всей таблицы. Обратите внимание на способ вставки записей. В цикле бла годаря функции происходит повторное использование одной и той же инструкции INSERT, в которую подставляются разные параметры. Эта простая дика не так эффективна, как подготовка одной инструкции INSERT, вставляющей группу записей. Но представьте себе программу, принимающую произвольные запросы на добавление, обновление и удаление записей. Тогда такая ме тодика окажется весьма удобной.

(Java Database Connectivity) — это стандартный интерфейс Java, предназна ченный для взаимодействия с базами данных. Он поддерживает работу как с реля ционными базами данных, так и с простыми табличными данными, например с текстовыми файлами, поля которых разделены символами табуляции. Интерфей сом JDBC пользуются как прикладные программисты, так и разработчики драйверов баз данных. Существует несколько для MySQL. Новейшие их версии доступны по адресу http://mmmysql.sourceforge.net.

В этой главе предполагается, что читатели знакомы с языком Java и умеют компи лировать Каждый работает в той среде, которая ему нравится. Для простоты я воспользовался утилитами компании Sun, установив их в Windows.

Подготовка программы Интерфейс JDBC является частью пакета Java 2 SDK. Чтобы иметь возможность подключаться к серверу MySQL, необходимо добавить каталог драйвера MySQL в спи сок путевых имен классов. Я инсталлировал драйвер MM.MySQL в каталог В результате был создан подкаталог 2с. Затем я расширил список путевых имен классов, чтобы он выглядел следующим образом:

С 3 С 3 2С Обратите внимание на формат имен 8.3, свойственный Windows.

Библиотека функций JDBC инкапсулирована в пакете поэтому программа должна импортировать все его классы Сам драйвер не импортируется.

Он загружается на этапе выполнения программы с помощью метода Имя драйвера MM.MySQLвыглядит так:

Driver. Этот класс, как и все драйверы JDBC, реализует интерфейс j Driver.

После загрузки драйвера воспользуйтесь услугами менеджера драйверов для уста новления соединения с сервером. Для этого нужно сформировать URL адрес соеди нения. Формат адреса таков:

[узел] В табл. 17.1 приведен список параметров, которые можно указывать в строке под ключения.

Параметр Описание Если равен True, драйвер будет повторно подключаться к серверу в случае потери связи с ним;

по умолчанию равен False Если параметр равен True, то данный пара метр задает используемый набор символов Задает интервал времени в секундах между попытками подключения к серверу (по умолчанию — 2 секунды) Задает максимальное число повторных попыток чения к серверу (по умолчанию — 3) Задает максимальное число записей, которое получено в ответ на запрос;

по умолчанию равен нулю, т.е. ограничение отсутствует password Задает пароль для подключения Задает имя пользователя useUnicode Если равен True, драйвер будет кодировать строки по стандарту Unicode;

по умолчанию равен В рамках сеанса можно посылать произвольное число инструкций. Чтобы закрыть соединение, вызовите метод В листинге 17.1 показана минимальная Java программа, которая подключается к серверу и тут же отключается.

import public class public static void Извлечение данных Загрузка try catch (Exception try Подключение к базе данных.

Connection с Закрытие catch e) Извлечение данных Прежде чем посылать запросы базе данных, необходимо создать объект класса Statement. можно многократно использовать в запросах. В классе Statement есть три метода выпол нения запросов: и execute Update Каждый из них в качестве аргумента принимает текст запроса. Метод executeQuery возвращает объект класса содержащий щий набор записей. Метод возвращает число записей, участво вавших в запросе (это особенно удобно для инструкций INSERT и UPDATE). Метод execute возвращает 1 в случае инструкции SELECT и число записей для остальных запросов. удобно использовать тогда, когда тип выполняемого запроса неизвес тен заранее. В случае необходимости результирующий набор записей можно будет получить с помощью метода Объект класса ResultSet хранит указатель на текущую запись результирующего на бора. Для получения первой записи необходимо вызвать метод next Этот метод удобно использовать в качестве условия цикла, так как по достижении конца набора он возвращает NULL. После извлечения записи можно определить значения ее полей с мощью одного из методов семейства Полное имя метода соответствует типу возвращаемого значения. Например, метод возвращает числовое представ ление ячейки, а метод возвращает объект класса Date. Можно вызывать любой метод — драйвер самостоятельно выполнит необходимое преобразование.

В методах семейства столбцы задаются по имени или по номеру. В нумерация столбцов начинается с единицы. Если столбцы адресуются по имени, не 388 Глава 17.

обходимо, чтобы результирующий набор записей содержал различающиеся имена столбцов. Для устранения неоднозначностей пользуйтесь псевдонимами столбцов.

В листинге 17.2 показана простая программа, которая извлекает данные из табли цы user. Обратите внимание на то, что программа пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете эксперимен тировать с этой программой, подставьте корректные значения имени пользователя и пароля.

import public class public static void Загрузка драйвера.

try catch (Exception try Подключение к базе данных.

Connection с Создание Statement Выполнение запроса.

"SELECT User, Host FROM user ORDER BY Получение метаданных.

Вывод результатов запроса.

while Перебор всех столбцов.

for(int i++) Изменение данных Удаление Закрытие catch Если число столбцов в таблице результатов запроса неизвестно, необходимо соз дать объект класса В этот класс входят методы, позволяющие определять количество столбцов, их имена, размерности и т.д.

Изменение данных Запросы на вставку или обновление данных не возвращают наборы записей. Ис пользуйте метод который возвращает число записей, участвовав ших в запросе. Если ни одна запись не была изменена, возвращается нуль.

Программа, показанная в листинге 17.3, создает таблицу и добавляет в нее записи.

Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. Класс Prepared Statement позволяет описать запрос с параметрами, которые будут подставляться драйвером. В других СУБД поддерживаются предварительно скомпилированные за просы, которые анализируются один раз, а потом многократно выполняются.

В MySQL вместо этого применяются запросы с параметрами.

В подготовленном запросе метасимвол обозначает параметр, подставляемый драйвером перед выполнением запроса. Есть группа методов семейства по зволяющих присваивать значения параметрам по номерам. Первый параметр имеет номер 1. Благодаря этому нет необходимости использовать различные управляющие символы, защищаемые одинарными кавычками. Если вызвать метод то перед отправкой запроса серверу драйвер сохранит на диске образ объекта.

import public class public static void Connection Загрузка драйвера.

try catch (Exception e) try Подключение к базе данных.

с Создание инструкции.

Statement Создание "CREATE TABLE "ID NOT NULL "Name "PRIMARY Подготовка шаблона инструкции INSERT.

String new "INSERT INTO testapi (Name) VALUES Выполнение инструкций String[] names "Vicky", "Carl", "Ricky", "Jeff", "Bob", "Tina", i++) row Удаление "DELETE FROM testapi WHERE ID rows Обновление записей.

"UPDATE testapi SET Name rows Удаление таблицы.

TABLE Удаление Изменение данных close Закрытие catch VBSCRIPT И ODBC В этой главе...

Подготовка программы Извлечение данных Изменение данных райвер позволяет подключаться к серверу MySQL по протоколу ODBC (Open Database Это особенно удобно пользователям Win dows, поскольку для многих приложений Windows интерфейс ODBC — единст венное средство взаимодействия с базами данных. В UNIX этот интерфейс использу ется только для переноса приложений Windows. Помимо драйвера MyODBC в UNIX необходим менеджер ODBC, лицензия на который стоит немало.

Технология ASP (Active Server как и ODBC, тоже была разработана компа нией Microsoft. Она применяется сервером IIS (Internet Information Server) компании Microsoft для обслуживания Web приложений. Сценарии ASP представляют собой HTML файлы со специальными тэгами, которые интерпретируются сервером как ис ходный код. Несмотря на то что технология ASP поддерживает несколько языков сценариев, большинство разработчиков придерживаются языка VBScript.

В этой главе рассказывается о написании программы на языке VBScript, которая подключается к серверу MySQL по протоколу ODBC. Предполагается, что читатели имеют опыт написания сценариев ASP и работали с ODBC, по крайней мере на при кладном уровне.

Подготовка программы Прежде чем начинать работать с базой данных, необходимо инсталлировать драй вер MyODBC. Это отде льный файл, доступный на Web узле MySQL. Загрузите инстал ляционную программу для своей платформы и установите драйвер. Можно создать системный источник данных (Data Source Name, DSN) или включить всю информа цию о соединении непосредственно в сценарий.

Для запуска сценариев ASP необходим сервер IIS либо личный Web сервер (Personal Web Server, PWS). Для пользователей Windows они доступны бесплатно.

Сервер IIS работает в Windows NT/2000, a PWS в Windows 98/98/ME. Оба сервера являются частью вспомогательных пакетов. Я работал с сервером PWS в Windows 98.

Этот сервер есть на инсталляционных Windows 98, но в случае ходимости его можно загрузить с компании Microsoft. Для установки сервера 394 Глава VBScript и ODBC достаточно запустить инсталляционную программу и указать корневой каталог созда ваемого В листинге 18.1 показан минимальный сценарий, который подключается к серверу MySQL на локальномкомпьютере с использованием объектов ADO Data <%@ Option Explicit dim connection Подключение к серверу.

set & set connection=nothing Метод open принимает в качестве аргумента строку подключения к ODBC.

В данном случае в строке подключения указан не DSN, а непосредственно драйвер.

драйвер MySQL — это библиотечный файл но имя драйвера — "MySQL", как указано в панели управления ODBC.

В строке подключения могут содержаться различные параметры, разделяемые кой с запятой. Параметры, передаваемые драйверу MySQL, перечислены в табл. 18.1.

Параметр Описание DATABASE Имя стандартной базы данных OPTION Различные опции (табл. 18.2) PASSWORD, PWD Пароль для подключения PORT Порт для подключения (по умолчанию — 3306) SERVER Доменное имя или IP адрес сервера — SOCKET Файл или именованного канала STMT Запрос, выполняемый после установления соединения USER, UID Имя пользователя Подготовка программы Параметр OPTION представляет собой битовое поле, в котором могут быть заданы 18 опций (табл. 18.2). При создании источника данных ODBC на панели управления опции отображаются в виде флажков. Чтобы активизировать несколько опций, просто сложите их значения.

Значение опции Описание 1 Всегда сообщать формальную, а не фактическую столбца 2 Сообщать о количестве просмотренных, а не модифицированных записей 4 Вести журнал отладки 8 Не ограничивать количество записей в таблице результатов за проса 16 Отменить выдачу каких бы то ни было приглашений 32 Имитировать ODBC 1. 64 Игнорировать имена баз данных в табличных ссылках вида Использовать наборы записей менеджера ODBC 256 Не задавать идентификатор регионального стандарта 512 Дополнять поля типа CHAR до полной размерности столбца 1024 Возвращать полные имена столбцов в функции 2048 Сжимать данные, передаваемые между клиентом и сервером 4096 Разрешить пробелы между именем функции и открывающей скобкой 8192 Использоватьименованные каналы 16384 Приводить столбцы типа BIGINT к типу INT 32768 Определять принадлежность таблиц по имени пользователя, а не базы данных 65536 Учитывать опции, заданные в конфигурационных файлах Проверять наличие ошибок dim connection Объект подключения к базе данных dim query Запрос dim Результаты запроса dim Число столбцов в таблице результатов dim Счетчик цикла Изменение данных Выборка всех do while not & Отображение значений столбцов.

for 0 to & & next & vbcr) Переход к следующей loop Удаление результатов запроса.

set rs=nothing Закрытие set connection=nothing & vbcr) Обратите внимание на то, что в сценарии не делается явных предположений о личестве столбцов в таблице результатов запроса. Сценарий опрашивает свойство count и создает HTML таблицу имен столбцов соответствующего размера. Имя столбца извлекается из свойства name.

Изменение данных Запросы на вставку или обновление данных не возвращают наборы записей, но иногда требуется узнать, сколько записей было добавлено или изменено. Программа, представленная в листинге 18.3, ис пользует объект для лучшего контроля соединения. Программа создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы.

Option Explicit dim connection Объект подключения к базе данных 398 Глава VBScript и ODBC dim Объект взаимодействия с базой данных dim query Запрос dim names Массив имен для инструкции INSERT dim Счетчикцикла dim rows Число измененных записей Подключение к серверу.

set set set Создание таблицы.

query "CREATE TABLE query query & "ID NOT NULL AUTO_INCREMENT, query query & "Name query query & "PRIMARY query query & Инструкция для вставки записей.

query "INSERT INTO testapi (Name) VALUES Создание входного параметра типа 64, Вставка записей.

names "Vicky", "Carl", "Ricky", "Jeff", "Bob", "Tina", "Joey") for each n in names rows & row & next Очистка.

Удаление записей.

FROM testapi WHERE ID 4" rows & rows & vbcr) Обновление записей.

testapi SET Name rows & rows & vbcr) Удаление таблицы.

TABLE testapi" Изменение данных Закрытие set set connection=nothing & Сравните использование объекта command в листинге 18.3 с примером, показан ным в листинге 18.2. Сразу после создания объект связывается с активным соедине нием. Текст запроса не передается непосредственно методу execute а заносится в свойство после чего метод execute вызывается без аргументов.

Обратите внимание на способ вставки записей. Массив names содержит имена, вставляемые в таблицу Чтобы не нужно было создавать отдельный запрос для каждой инструкции INSERT, объекту command передается параметризованный запрос. Вместо значений, подставляемых позднее, указан метасимвол В других СУБД поддерживаются предварительно скомпилированные запросы, которые анали зируются один раз, а потом многократно выполняются. В MySQL вместо этого при меняются запросы с параметрами.

Перед выполнением запроса необходимо определить значение каждого параметра.

В листинге 18.3 единственный параметр инструкции INSERT имеет тип VARCHAR Метод создает объект, содержащий описание параметра, а метод append добавляет этот объект в коллекцию параметров (par ameters) объекта command. Метод createparameter принимает пять аргументов. Первый из них идентифицирует параметр запроса. Второй аргумент задает его SQL тип. Это должна быть целочисленная константа. В число 200 соответствует типу VARCHAR.

Описание соответствующих констант можно найти в библиотеке MSDN компании Mi crosoft. Третий аргумент определяет, является ли параметр входным, выходным или двойственным. Подобно предыдущему аргументу, это целочисленная константа, опи санная в документации по VBScript. Последние два аргумента задают длину параметра и его значение. В каждой операции вставки значение параметра будет разным, поэтому первоначально оно определено как пустая строка.

Прежде чем переходить к циклу вставки значений, нужно предупредить объект command о том, что он будет работать с подготовленной инструкцией. Тем самым сервер будет уведомлен о наличии у инструкции параметров. По окончании цикла вставки данный режим отключается.

В цикле for параметру инструкции INSERT по очереди присваиваются значения, хранящиеся в массиве names. Метод execute помещает в переменную rows число записей, вставленных в таблицу. Последовательная вставка записей — не самое эф фективное решение, учитывая, что в MySQL есть разновидность инструкции INSERT, позволяющая обрабатывать группу записей (см. главу 13, "Инструкции SQL"). Данный метод удобен тогда, когда требуется выполнять произвольные пользовательские за просы. Кроме того, он позволяет избежать проблем с управляющими символами.

PHP В этой главе.

Подготовка программы Извлечение данных Изменение данных это наиболее популярная СУБД среди программистов, работающих на языке Обе эти системы извлекают преимущества из популярности друг друга. В частности, для MySQL выгодно растущее число сторонников писать Web приложения на РНР, а для РНР выгодна высокая оперативность команды разработчиков MySQL. Монти ответственный за сопровождение MySQL, входит в группу разработчиков ядра РНР и является членом зала славы РНР РНР — это серверный язык сценариев, предназначенный для встраивания кода в HTML файлы с помощью специальных тэгов. Он поддерживает работу с MySQL, оп ределяя собственные которые содержат вызовы функций биб лиотеки языка С (рассматривалась в главе 15, "Библиотека функций языка С"). Опи сание функций РНР можно найти на Web узле www.php.net.

Подготовка программы В РНР имеются собственные средства поддержки MySQL. В двоичные дистрибу тивы входит модуль расширения MySQL, а в исходный дистрибутив включен каталог с исходными кодами, предназначенными для реализации интерфейса к этой СУБД. Ес ли пакет РНР компилируется из исходных текстов, то внешняя библиотека функций MySQL не нужна: она входит в состав пакета.

РНР хорошо взаимодействует не только с сервером Apache, но и с сервером IIS в Windows. В любом случае Web сервер должен быть настроен таким образом, чтобы файлы, имеющие расширение были ассоциированы с модулем РНР.

Подключиться к серверу MySQL из несложно. Достаточно вызвать функцию или mysql_pconnect с соответствующими аргумен тами. Обе функции возвращают идентификатор соединения, требуемый для боль 402 Глава 19. PHP остальных функций. Функция создает постоянное со единение. Оно будет сохранено после завершения сценария на случай повторного использования. Такие соединения закрывать не нужно.

Первый аргумент функции mysql_pconnect идентифицирует сервер по имени или адресу. Через двоеточие может быть задан номер порта, если он отличается от стандартного (3306). Аналогичным образом задается Другими двумя аргумен тами являются имя пользователя и пароль.

В листинге 19.1 показан сценарий, который устанавливает соединение с сервером MySQL на узле и задает базу данных, используемую по умолчанию. В сце нарии не выполняется проверка ошибок, но модуль выдаст предупреждение в случае неудачного завершения одной из функций.

Открытие постоянного $dblink Выбор базы данных Извлечение данных После подключения к серверу баз данных можно посылать ему запросы с помощью функции Эта функция принимает в качестве аргумента текст SQL инструкции плюс идентификатор соединения, полученный от функции connect или mysql_pconnect и возвращает идентификатор результирующего набора записей. В случае ошибки возвращается нуль.

Функция mysql_result извлекает значение одной ячейки, но гораздо удобнее пользоваться функцией или Все они возвращают следующую запись из указанного набора, что позволяет эффективно применять их в цикле while.

Рассмотрим пример, показанный в листинге 19.2. Этотсценарий извлекает записи из таблицы user, оформляя результаты запроса в виде HTML таблицы. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользова теля root с явно неправильным паролем. Если будете экспериментировать с этим сценарием, подставьте корректные значения имени пользователя и пароля.

Извлечение данных Открытие постоянного соединения.

"root", not connect to Выбор базы данных not select Выполнение запроса.

"SELECT User, Host FROM user ORDER BY 1,2";

not execute (mysql_errno mysql_error Получение информации о столбцах.

while($field Извлечение записей.

while($row foreach($row as $r) 404 Глава 19. PHP В этом примере ведется тщательный контроль ошибок. Многие в случае ошибки возвращают FALSE. Внутри инструкций if отображается сообщение об ошибке, за которым следуют номер ошибки и ее описание, полученные от сервера MySQL.

Прежде чем извлекать значения столбцов, сценарий создает заголовок таблицы с именами столбцов. Функция возвращает объект, содержащий описание полей указанного набора записей. В данном примере используется только свойство name этого объекта, хотя в нем хранится вся информация о чая его тип и размерность. При очередном обращении функция возвращает описание следующего столбца, поэтому она вызывается в цикле.

Функция etch_row возвращает массив значений столбцов, индексация которых начинается с нуля. Поскольку в данном примере записи отображаются цели ком (в цикле нет необходимости адресовать отдельные столбцы.

Изменение данных Запросы на вставку или обновление данных не возвращают наборы записей. Они тоже выполняются с помощью функции mysql_query но вызывать функцию f нет необходимости. Если требуется узнать число добавленных или ненных записей, воспользуйтесь функцией ected_rows (листинг 19.3).

Представленный ниже сценарий создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. В массиве name содержатся девять имен, вставляемых в базу данных одной инструкцией INSERT. Сценарий со ставляет запрос, поочередно добавляя к нему элементы массива, отформатированные в соответствии с синтаксисом многострочной инструкции INSERT. Функция вставляет обратную косую черту перед каждым символом, имеющим специальное назначение в SQL, например перед одинарной кавычкой. С помощью функции из текста запроса удаляется хвостовая запятая.

Открытие постоянного соединения.

not connect to Выбор базы данных Изменение данных not select Создание таблицы.

$Query "CREATE TABLE "ID NOT NULL "Name "PRIMARY not create Вставка записей.

$Query "INSERT INTO testapi (Name) VALUES $name "Vicky", "Carl", "Ricky", "Jeff", "Bob", "Tina", as $n) $Query $Query 0, not insert rows Удаление записей.

$Query "DELETE FROM testapi WHERE ID not delete rows Обновление записей.

$Query "UPDATE testapi SET Name not update rows Удаление таблицы.

406 Глава 19. PHP $Query "DROP TABLE not drop PERL этой Подготовка программы Извлечение данных Изменение данных рудно представить UNIX систему без языка Perl. Это один из основных языков сценариев, завоевавший Internet. Он применяется при системном администри ровании, в научных расчетах и при создании Некоторые сценарии MySQL написаны именно на Perl. Сценарии Perl прекрасно работают в Windows и в других операционных системах.

В этой главе предполагается, что читатели знакомы с данным языком и умеют пи сать собственные сценарии. Будет рассмотрен интерфейс DBI, но лишь в общих чер тах. В документации к MySQL есть описание драйвера :mysql и методов DBI.

Для получения дополнительной информации можно также воспользоваться команд Подготовка программы Поддержка MySQL в Perl реализована в интерфейсе DBI (Database Interface). Этот интерфейс определяет унифицированные методы доступа ко многим источникам дан ных, включая реляционные СУБД. Помимо модуля DBI необходим драйвер DBD (Database Driver) для конкретной СУБД. В случае MySQL и драйвер называется Соответствующие файлы можно загрузить на MySQL или из хивов (Comprehensive Perl Archive Network) адресу Посетите также посвященный интерфейсу DBI Процесс инсталляции модуля Perl включает в себя запуск перед ком пиляцией исходного кода. В остальном все делается так же, как и в случае любой дру гой программы. Последовательность команд будет такой:

perl make make test make install 410 Глава 20. Perl После инсталляции модуля DBIи драйвера MySQL подключение к серверу ствляется с помощью метода: (листинг 20.1). Он возвращает дескриптор базы данных. Первый аргумент метода определяет источник данных. Компоненты этой строки разделяются двоеточиями. Первый компонент гда равен Второй компонент идентифицирует драйвер, в данном случае Третий компонент — это имя базы данных. Дополнительно можно указать рес узла и порт. Остальные два аргумента метода connect задают имя пользователя и порт. По окончании сеанса необходимо вызвать метод disconnect Подключение модуля use DBI;

I Подключение к базе данных.

$dbh = Извлечение данных После подключения к серверу баз данных можно посылать ему запросы с помощью методов prepare и execute Первый из них подготавливает инструкцию к вы полнению и возвращает ее дескриптор. Второй метод передает инструкцию серверу и просит его подготовить результаты запроса.

Рассмотрим пример, показанный в листинге 20.2. Этот сценарий извлекает записи из таблицы use r и отображает их на экране. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать со сценарием, подставьте корректные зна чения имени пользователя и пароля.

Подключение модуля use DBI;

§ Подключение к базе данных.

my $dbh = tt Подготовка запроса.

my $query "SELECT User, Host FROM user ORDER BY 1,2";

my $sth or die prepare $query: $dbh >errstr Изменение данных Выполнение запроса.

or die execute $query: $dbh >errstr i Извлечение записей.

my $sth >fetchrow_array) my for $i print $row[$i] i Удаление инструкции.

tt В этом примере ведется тщательный контроль ошибок. Многие в случае ошибки возвращают нуль. Ветвь or die интерпретируется только тогда, когда первая часть конструкции равна нулю. Обратите внимание на сообщение об ошибке, в котором указывается, какой запрос потерпел неудачу, и приводится сообщение, по лученное от драйвера.

Метод возвращает массив значений столбцов, индексация торых начинается с нуля. Данный сценарий достаточно универсален и позволяет об рабатывать результаты произвольной инструкции SELECT. He делается никаких предположений о сколько столбцов имеется в таблице результатов запроса. Это значение определяется с помощью свойства NUM_OF_FIELDS объекта инструкции.

Метод etchrow_array возвращает следующую запись из набора, пока не будет достигнут конец таблицы.

В конце сценария вызывается метод который освобождает память, за нимаемую инструкцией.

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 7 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.