Анатолий Мотев СанктПетербург бхвпетербург 2006 удк 681 06 ббк 32. 973. 26018. 2 М85
Скачать 4.25 Mb.
|
Самой СУБД MySQL для инсталляции требуется около 100 Мбайт дискового пространства. ÓÐÎÊ 4 Óñòàíîâêà MySQL ïîä Windows Дистрибутив MySQL вы можете загрузить из Интернета (http://www.mysql.com /downloads/index.html или http://www.mysql.ru). Откройте браузер, перей- дите по указанному адресу и выберите рекомендованную версию MySQL — MySQL x.x -- Production release (recommended) (на момент написания кни- ги рекомендованной являлась MySQL версии 4.1). Загрузите дистрибутив на свой жесткий диск в какой-нибудь каталог (пап- ку). После окончания загрузки в выбранном каталоге появится архив MYSQL-X.X.X-WIN32.ZIP. Его нужно распаковать и запустить файл SETUP.EXE. Откроется окно программы установки MySQL Servers and Clients (рис. 4.1). Нажмите кнопку Next > для продолжения установки. На втором этапе необходимо выбрать тип установки (рис. 4.2). Выберите пе- реключатель Custom (выборочная установка) и нажмите кнопку Next >. В следующем окне (рис. 4.3) нужно указать каталог для установки MySQL. Для удобства использования установим MySQL в корневой каталог диска С:. Нажмите кнопку Change и задайте C:\MYSQL\ в качестве каталога для уста- новки. Чтобы перейти к следующему шагу установки, нажмите кнопку Next >. В открывшемся окне (рис. 4.4) нажмите кнопку Install, чтобы начать процесс установки. На следующем этапе (рис. 4.5) предлагается создать новую учетную запись на сайте MySQL.com. Мы не будем этого делать и выберем переключатель Skip Sign-Up (пропустить). Для продолжения установки нажмем кнопку Next > После окончания установки предлагается настроить MySQL Server (рис. 4.6). Нажмите кнопку Finish. ×àñòü II. MySQL 62 Рис. 4.1. Установка, этап 1 Рис. 4.2. Установка, этап 2 Óðîê 4. Óñòàíîâêà MySQL ïîä Windows 63 Рис. 4.3. Установка, этап 3 Рис. 4.4. Установка, этап 4 ×àñòü II. MySQL 64 Рис. 4.5. Установка, этап 5 Рис. 4.6. Установка, этап 6 (последний) Óðîê 4. Óñòàíîâêà MySQL ïîä Windows 65 Программа сервера базы данных расположена на том компьютере, где хра- нится БД. Она получает запросы клиентов (программ, передающих запросы) через сеть и осуществляет доступ к содержимому БД, для предоставления запрошенной информации. Итак, мы решили настроить сервер. Программа установки запустила мастер конфигурации (рис. 4.7). Для продолжения нажмите кнопку Next >. Рис. 4.7. Настройка, этап 1 На втором этапе конфигурации (рис. 4.8) вам предложат выбрать один из двух типов конфигурации. Выберите переключатель Standard Configuration и нажмите кнопку Next > для продолжения настройки. На следующем этапе (рис. 4.9) вы можете установить флажок Install As Windows Service , если хотите запускать сервер автоматически при загрузке Windows. Нажмите кнопку Next > для продолжения. Мастер конфигурации готов к внесению изменений (рис. 4.10). Нажмите кнопку Execute. Конфигурация закончена (рис. 4.11), все настройки внесены в файл MY.INI. ×àñòü II. MySQL 66 Рис. 4.8. Настройка, этап 2 Рис. 4.9. Настройка, этап 3 Óðîê 4. Óñòàíîâêà MySQL ïîä Windows 67 Рис. 4.10. Настройка, этап 4 Рис. 4.11. Настройка, этап 5 (последний) ÓÐÎÊ 5 Óòèëèòû MySQL Теперь у вас установлена СУБД MySQL. Запустите Проводник Windows и откройте папку C:\MYSQL\BIN\ (рис. 5.1). Здесь вы найдете утилиты, неко- торые из них мы рассмотрим далее. Утилита MYSQLD.EXE предназначена для запуска сервера MySQL. Запуск сервера — первое, что нужно сделать перед началом работы с БД. Сделайте двойной щелчок на имени файла MYSQLD.EXE в окне bin (рис. 5.1) — и сервер запущен. После этого можно использовать остальные утилиты. Рис. 5.1. Утилиты в папке C:\MYSQL\BIN\ Óðîê 5. Óòèëèòû MySQL 69 Утилита MYSQLSHOW.EXE при запуске без параметров выводит список баз данных, хранящихся на сервере. Если при запуске утилиты указать имя БД, то будет выведен список таблиц, имеющихся в этой БД. При указании имени конкретной таблицы выводится информация о ее структуре. Формат запуска утилиты с параметрами: mysqlshow.exe [опции] [имя_БД [имя_таблицы]] [ ] — условное обозначение того, что параметр не является обязательным. Допустимые опции: -hхост , -uпользователь , -pпароль . Например: mysqlshow.exe –hlocalhost –uroot –p12345 ÓÐÎÊ 6 Èñïîëüçîâàíèå êîìàíäíîé ñòðîêè äëÿ îáðàùåíèÿ ê ÁÄ Для того чтобы увидеть, как работают описанные утилиты, перейдем в режим DOS. Нажмите кнопку Пуск (Start) и выберите пункт Выполнить (Run). В открывшемся окне введите команду cmd (или command ) и нажмите кнопку ОК. Введите cd \mysql\bin в командной строке открывшегося окна и нажми- те клавишу Рис. 6.1. Переход в каталог C:\MYSQL\BIN Итак, давайте попробуем запустить утилиту MYSQLSHOW без указания ка- ких-либо параметров (рис. 6.2). В MySQL есть две базы данных, имена которых вы видите в окне. База дан- ных test не содержит таблиц, поэтому для просмотра таблиц воспользуемся базой данных mysql Введите в командной строке mysqlshow mysql После запуска утилиты вы увидите список таблиц, имеющихся в БД (рис. 6.3). Теперь можно просмотреть структуру любой из этих таблиц. Для этого введите в командной строке mysqlshow mysql func (рис. 6.4). Утилита MYSQL.EXE предназначена для запуска консоли (командной строки MySQL). Введите в командной строке mysql и нажмите клавишу Óðîê 6. Èñïîëüçîâàíèå êîìàíäíîé ñòðîêè äëÿ îáðàùåíèÿ ê ÁÄ 71 Рис. 6.2. Результат запуска утилиты MYSQLSHOW без указания параметров Рис. 6.3. Результат запуска утилиты MYSQLSHOW с указанием имени БД Для просмотра команд, допустимых в консоли, введите в командной строке help . Будет выведен список команд и их сокращенных вариантов (shortcut), начинающихся с обратного слэша ( \ ) (рис. 6.5). Каждая команда должна заканчиваться символом точки с запятой ( ; ). Неко- торые команды выполняются и без этого символа (например, help ). Но если команда требует обязательного наличия точки с запятой, а вы ее не ввели и нажали клавишу (рис. 6.6). ×àñòü II. MySQL 72 Рис. 6.4. Результат запуска утилиты MYSQLSHOW с указанием имени таблицы Рис. 6.5. Список всех команд MySQL После того как вы введете ';' , система выполнит команду. Команда show tables; выведет список таблиц из БД mysql , которую мы выбрали ранее с по- мощью команды use (рис. 6.7). Óðîê 6. Èñïîëüçîâàíèå êîìàíäíîé ñòðîêè äëÿ îáðàùåíèÿ ê ÁÄ 73 Рис. 6.6. Ожидание ввода ';' Рис. 6.7. Выполнение команды Для выхода из режима консоли MySQL введите в командной строке команду exit или quit (рис. 6.8). Рис. 6.8. Выход из режима консоли Итак, продолжим рассмотрение утилит MySQL. Утилита MYSQLADMIN.EXE предоставляет административные функции сервера. Полный список команд можно просмотреть, запустив утилиту без параметров. ×àñòü II. MySQL 74 Вот некоторые из них: create имя_БД — создать базу данных; drop имя_БД — удалить базу данных; reload — перезапустить сервер; shutdown — окончание работы сервера; status — информация о состоянии сервера. Формат запуска утилиты с параметрами (опции те же, что и у MYSQLSHOW.EXE): mysqladmin.exe [опции] [команды] Утилита MYSQLDUMP.EXE предназначена для сохранения базы данных или ее таблицы (рис. 6.9). Формат запуска утилиты: mysqldump.exe [опции] [имя_БД [имя_таблицы]] Рис. 6.9. Результат работы утилиты MYSQLDUMP (структура одной из таблиц) Óðîê 6. Èñïîëüçîâàíèå êîìàíäíîé ñòðîêè äëÿ îáðàùåíèÿ ê ÁÄ 75 Здесь, кроме уже известных вам опций, можно упомянуть еще одну: --add-drop-table — добавляет в текстовый файл, содержащий структуру и данные БД, инструкцию для автоматического удаления существующей таб- лицы с этим же именем ( DROP TABLE IF EXISTS 'имя_таблицы' ). Эта опция используется в ранних версиях MySQL, а в версии 4.1, установка которой рассмотрена в этой книге, данная инструкция добавляется автомати- чески. Вы также можете перенаправить вывод в файл: введите в командной стро- ке mysqldump mysql>dump.txt и нажмите клавишу C:\MYSQL\BIN будет создан файл DUMP.TXT, содержащий структуру и данные БД mysql . Таким способом можно выполнять резервное копирование вашей базы. Кроме этого данный файл можно перенести на другой компьютер для созда- ния на нем такой же БД (рис. 6.10). В этом случае после запуска сервера нуж- но выполнить следующие команды: mysqladmin create db_name (Создаем БД) mysql db_name Напоминаю, что удалить БД можно с помощью команды drop : mysqladmin drop db_name Также вы можете создать БД, запустив команду create database db_name в режиме консоли (рис. 6.11). Запустите режим консоли, введите команду create database и укажите имя БД (например, mybase ). Поставьте точку с запятой ( ; ) и нажмите клавишу . Для удаления БД введите команду drop database db_name; (рис. 6.12). Итак, теперь вы знаете, как создается база данных. Предлагаю вам создать БД library , с которой мы и будем работать. ×àñòü II. MySQL 76 Рис. 6.11. Создание БД в режиме консоли MySQL Рис. 6.12. Удаление БД ЧАСТЬ III Ôîðìèðîâàíèå çàïðîñîâ ê ÁÄ. ßçûê SQL Óðîê 7. Ñîçäàíèå è óäàëåíèå òàáëèö Óðîê 8. Èçìåíåíèå ñòðóêòóðû òàáëèöû Óðîê 9. Äîáàâëåíèå äàííûõ â òàáëèöó Óðîê 10. Óäàëåíèå äàííûõ Óðîê 11. Èçìåíåíèå äàííûõ Óðîê 12. Âûáîðêà äàííûõ (îïåðàòîð SELECT) Для чтения и записи в базах данных MySQL используется структурирован- ный язык запросов (Structured Query Language, SQL). С помощью SQL можно осуществлять ввод данных, их изменение, удаление, а также выборку. SQL является основополагающим инструментом, необходимым для взаимодейст- вия с MySQL и другими СУБД. Даже если для доступа к БД вы пользуетесь каким-то приложением или графическим интерфейсом пользователя (GUI), где-то "в глубине" это приложение генерирует SQL-команды. Язык SQL "структурирован" в том отношении, что он придерживается опре- деленного набора правил. Он очень не похож на традиционные языки про- граммирования, такие как С++, Java, PHP или Perl, близок к "естественному языку". Пример SQL-запроса: SELECT title FROM book WHERE year_issue=2003 Как видите, это напоминает фразу на ломаном английском: "Выбрать назва- ние из книг, где год выпуска равен 2003". У такого подхода есть как преиму- щества, так и недостатки. Операторы языка SQL можно разбить на несколько групп: Создание, удаление, изменение и выборка БД Создание, удаление и изменение таблиц и индексов Изменение данных в таблицах CREATE DATABASE, DROP DATABASE, ALTER DATABASE, USE CREATE TABLE, CREATE INDEX, DROP TABLE, DROP INDEX, ALTER TABLE INSERT, DELETE, UPDATE, LOAD DATA, REPLACE Выполнение транзакций Просмотр информации о таблицах и БД Администрирование Выборка данных из таблиц BEGIN, COMMIT, ROLLBACK, SET AUTOCOMMIT DESCRIBE (DESC), SHOW GRANT, FLUSH, REVOKE SELECT, UNION Здесь приведены только операторы, поддерживаемые MySQL. Но следует заметить, что СУБД MySQL постоянно совершенствуется и с каждой новой версией в нее добавляются все новые и новые возможности. Что касается чувствительности SQL-команд к регистру, то все зависит от час- ти этой команды и от ОС. Например, ключевые слова и имена функций не зависят от регистра и могут вводиться как угодно, а имена таблиц и баз дан- ных зависят от ОС, под управлением которой работает сервер (об этом мы уже говорили в части II). Имена полей и индексов не чувствительны к ре- гистру, а псевдонимы — чувствительны (псевдоним можно объявить в любом регистре, но в дальнейшем нужно обращаться к нему так, как он был объяв- лен). В этой книге я записывал ключевые слова и названия функций в верх- нем регистре, а все остальное (имена таблиц, полей и т. д.) — в нижнем. ÓÐÎÊ 7 Ñîçäàíèå è óäàëåíèå òàáëèö После создания общей структуры базы данных нам необходимо приступить к созданию таблиц. В этом уроке мы рассмотрим операторы языка SQL, позво- ляющие создавать и удалять таблицы. Ñîçäàíèå òàáëèö Создать таблицу можно с помощью оператора CREATE TABLE . Общий формат записи оператора CREATE TABLE : CREATE TABLE имя_таблицы (описание_поля, ...) Параметры: имя_таблицы — имя создаваемой таблицы, описание_поля — опи- сание поля таблицы. В MySQL 3.23 и более поздних версий в операторе CREATE TABLE можно использовать ключевые слова IF NOT EXISTS : CREATE TABLE IF NOT EXISTS имя_таблицы (описание_поля, ...) В этом случае не возникнет ошибка, если такая таблица уже существует. Но нужно учитывать, что идентичность структуры таблиц не проверяется. Во время создания таблицы можно установить ее тип (см. часть II), например: CREATE TABLE mytable (...) TYPE=INNODB; Если тип таблицы не задан, то сервер создает, как вы помните, таблицу типа MyISAM При описании поля указываются его имя, тип, а также дополнительные инст- рукции (если они нужны): PRIMARY KEY — данная инструкция говорит о том, что поле является пер- вичным ключом. Поле с такой инструкцией должно быть определено как NOT NULL . В таблице может быть только один первичный ключ. Если ключ ×àñòü III. Ôîðìèðîâàíèå çàïðîñîâ ê ÁÄ. ßçûê SQL 80 составной, то для каждого поля, входящего в составной ключ, не нужно указывать PRIMARY KEY (необходимо указать только NOT NULL ), вместо это- го применяется синтаксис PRIMARY KEY(имя_поля1,имя_поля2) ; NULL — поле с неопределенным значением (если не указывается ни NULL , ни NOT NULL , то поле интерпретируется так, как будто указано NULL ); NOT NULL — непустое поле (при внесении записи в таблицу должно быть обязательно заполнено). Эта инструкция указывается для первичного ключа; Инструкции NULL и NOT NULL не применяются к полям типа TIMESTAMP. При установке такого поля в значение NULL в него будут записаны текущие дата и время. KEY или INDEX — поле будет индексированным (в таких полях быстрее вы- полняются операции SELECT ); ZEROFILL — эта инструкция добавляет к значению нули слева, чтобы его длина совпала с длиной поля. Например, если поле имеет тип smallint(5) и вы заносите в него значение 1, то в результате получаете 00001; UNSIGNED — беззнаковое поле (для числовых типов); AUTO_INCREMENT — указывается для целочисленных полей. При записи ве- личины NULL (рекомендуется) или 0 в поле AUTO_INCREMENT получим значе- ние value+1 , где value представляет собой наибольшее для этого поля зна- чение в таблице на момент записи. Последовательность AUTO_INCREMENT начинается с 1. В таблице может быть только одно поле AUTO_INCREMENT , и оно должно быть индексировано. Кроме того, версия MySQL 3.23 будет правильно работать только с положительными величинами поля AUTO_INCREMENT . В случае внесения отрицательного числа оно интерпрети- руется как очень большое положительное число; DEFAULT 'значение' — значение по умолчанию. Величина DEFAULT должна быть константой, она не может быть функцией или выражением. Если для данного поля не задается никакой величины DEFAULT , то MySQL автомати- чески назначает ее. Если поле может принимать NULL как допустимую ве- личину, то по умолчанию ему присваивается значение NULL . Если поле объявлено как NOT NULL , то значение по умолчанию зависит от типа поля: • для числовых типов, за исключением объявленных с атрибутом AUTO_INCREMENT , значение по умолчанию равно 0. Для поля AUTO_ INCREMENT значением по умолчанию является следующее значение в по- следовательности для этого поля; Óðîê 7. Ñîçäàíèå è óäàëåíèå òàáëèö 81 • для типов даты и времени, отличных от TIMESTAMP , значение по умолча- нию равно соответствующей нулевой величине для данного типа. Для первого поля TIMESTAMP в таблице значение по умолчанию представляет собой текущее значение даты и времени; • для строковых типов, кроме ENUM , значением по умолчанию будет пус- тая строка. Для ENUM значение по умолчанию равно первой перечисляе- мой величине (если явно не задано другое значение по умолчанию с помощью директивы DEFAULT ); BINARY — поле, чувствительное к регистру букв (для типов CHAR и VARCHAR ); UNIQUE — поле с уникальными значениями. Если попытаться внести стро- ку, совпадающую с уже существующей строкой, то возникнет ошибка вы- полнения команды. Ïîäðîáíåå îá èíäåêñèðîâàíèè Есть множество методов оптимизации работы вашей системы, но самым эф- фективным остается индексирование. Индексирование таблиц позволит уменьшить время выполнения запросов. Рассмотрим неиндексированную таблицу (табл. 7.1). Òàáëèöà 7.1. Íåèíäåêñèðîâàííàÿ òàáëèöà reader id_reader reader id_addr 12 Иванов 2 13 Петров 3 14 Васечкин 4 15 Смирнова 5 16 Дворников 6 17 Иванова 2 18 Мусин 7 19 Смирнов 5 Данная таблица не имеет индекса, поэтому при поиске читателей, живущих по определенному адресу, нужно будет проверить все строки на совпадение с нужным значением. Для этого потребуется просмотреть всю таблицу (она может быть в сотни раз больше), что займет значительное время. В табл. 7.2 представлена таблица индексов для поля id_addr таблицы reader |