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

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

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

название

тип поля

1. 

идентификатор

счетчик

2. 

фамилия имя

текстовое

3. 

е-mail

текстовое

4. 

дата рождения

дата/время

5. 

информация о ученике

поле МЕМО

6. 

год поступления в школу

числовой

Здесь необходимы небольшие пояснения:

  • в таблице должно быть поле, значение которого уникально для каждой записи. Самый простой способ создания такого поля - это доверить эту работу самой базе данных, поле типа «счетчик» будет формироваться автоматически и будет принимать значения 1, 2, 3 и т.д.
  • поле «МЕМО» содержит текстовую информацию большого объема в отличие от просто «текстового» поля, размер которого ограничен 255 символами.
  • Поле «год поступления в школу» сделать типом дата/время не удобно, так как нам придется заполнять не только год, но и месяц, и день поступления.

База данных MySQL также оперирует таблицами, полями, типами полей. Для этого в командной строке Windows (кнопка Пуск – Выполнить cmd) наберите команду для запуска базы данных. Обратите внимание, запуск MySQL происходит из ВИРТУАЛЬНОГО диска, в приведенном примере это диск Z.

Z:\>cd usr     
Z:\usr>cd local
Z:\usr\local>cd mysql5
Z:\usr\local\mysql5>cd bin
Z:\usr\local\mysql5\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Параметры -u root -p, сообщают, что запуск происходит от имени суперпользователя root с пустым паролем.

И здесь нас ждет сюрприз, вся работа с базой данных происходит не через привычный графический интерфейс, а через командную строку (рисунок 9)!

Консоль для работы с базой данных MySQL
Рис. 9. Консоль для работы с базой данных MySQL.

Все дело в том, что изначально базы данных MySQL были прописаны на компьютерах под управлением операционной системы Unix/Linux, а для них такой интерфейс привычен. Но мы не должны пугаться, так как работа в таком аскетичном режиме позволит нам изучить универсальный язык обращения к любой базе данных (язык SQL-запросов) и позволит использовать этот язык в наших программах.

Конечно, созданы программы, например Mascon (http://www.scibit.com/Mascon), которые позволяют работать с базами данных MySQL через оконный интерфейс, щелкать на кнопки, выбирать команды меню. Но нам от них пользы будет не много, так как вся работа с базами данных у нас будет вестись программно через php-код, а в нем мы будем использовать те же самые команды, что и в консольном режиме.

Другой способ работы с MySQL - это использование утилиты phpMyAdmin, которая входит в Denwer, и доступна по адресу http://localhost/phpmyadmin. Вся работа происходит через web-интерфейс. Подобные утилиты есть на многих удаленных серверах, на которых вы решите размещать ваши сайты.

5.1. Команды MySQL

Итак, все команды мы отдаем, печатая их в консоли. Запомним простые правила:

  • Строка в консоли начинается с символов mysql>.
  • Команды могут быть достаточно длинными, и вы можете нажимать на клавишу Enter, перенося команду на следующую строку. Для завершения и выполнения команды необходимо поставить символом «точка с запятой».
  • В случае, если вы ввели команду неправильно, на экране появится сообщение об ошибке с комментарием MySQL.
  • Для того, чтобы не набирать всю команду заново, вы можете нажать на клавиатуре кнопку со стрелкой вверх, вызвать предыдущую команду, а после внести в нее правку.
  • Ответ консоли «Query OK (0.03 sec)» сообщает, что наша команда успешно выполнена.

Итак давайте узнаем первые самые часто используемые команды:

show databases; (команда, показывающая уже существующие базы данных). Ответ консоли представлен на рисунке 10.

Вывод баз данных MySQL
Рисунок 10. Вывод баз данных MySQL.

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

create database name; (создать базу данных name) Вместо «name» вы должны ввести имя вашей новой базы данных. При этом создается пустая база, не содержащая ни каких таблиц. При этом Denver создаст в каталоге C:\WebServers\usr\local\mysql\data пустой каталог с именем вашей базы данных. Вы можете использовать этот каталог со всем содержимым для переноса своих баз с компьютера на компьютер.

use name; (перейти к базе данных «name») Ту же самую команду можно записать короче: \u name

drop database name; (удалить базу данных name) При этом будет удален каталог, в котором хранилась база данных со всем содержимым. Ни каких дополнительных вопросов при удалении MySQL задавать не будет, так что будьте внимательны.

создание новой таблицы данных:
После того, как база данных создана, (и вы зашли в нее с помощью команды \u) необходимо создать таблицу, описывая все поля, которые будут в ней:

mysql> create table student (
id_student int not null auto_increment,
name varchar(50),
birthday date,
info text,
e_mail varchar(50),
yare int,
primary key (id_student));
Query OK, 0 rows affected (0.06 sec)

В данном примере создана таблица student, содержащая шесть полей. В первой строчке мы задали имя таблицы. Далее идет описание поля id_student, оно должно быть целочисленным (int), не может быть пустым (not null) и автоматически увеличивается на единицу для каждой новой записи (auto_increment). Ёто - аналог поля типа «счетчик» в MS Access. Поле name содержит текст длиной в 50 символов, поле birthday имеет тип дата (в нем хранится информация вида 2006-08-24). Поле info может содержать фрагмент текста большого объема. Последняя строка задает ключевое поле (id_author), через которое данная таблица может связываться с другими таблицами.

Внимание! Название базы данных и все поля ОБЯЗАТЕЛЬНО пишите латиницей, без пробелов.

На удаленных серверах, как правило, разрешается использовать только одну базу данных (дополнительные базы за дополнительные деньги). А количество таблиц в базе не ограничено, поэтому в одной базе хранят все таблицы. Чтобы работать с ними было удобно, имеет смысл всем таблицам для одного сервиса использовать однотипные названия, например: school_students, school_teachers и т.п.

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

     mysql> describe student;

вы получите следующее сообщение:

Для добавления данных в таблицы существует универсальный язык SQL. Вообще-то, команда для просмотра базы, создания таблицы - это тоже команды SQL.

5.2. SQL-запросы

SQL расшифровывается, как Structure Query Language - Структурированный язык Запросов. С помощью этого языка вы можете извлечь информацию из любой современной базы данных. Когда в MS Access вы конструируете запросы, программа пишет sql-запросы за вас, хотя и там можно взять управление в свои руки. Давайте рассмотрим основные группы запросов.

добавление данных в таблицу

   mysql> INSERT INTO student VALUES(null, 'Иванов', '1993-02-20', ‘’, ‘’, ‘2004’);

Данная команда добавляет в таблицу user запись о ученике. Должны быть перечислены все поля, в той последовательности, как они создавались с помощью команды create table. Так как первое поле id_student формируется автоматически, мы не должны сами добавлять значение, это сделает параметр null. Поля «информация о ученике» и «e-mail» оставлены пустыми, но они все равно должны быть указаны в запросе. В данном запросе мы использовали русские буквы, но необходимо помнить, что MySQL поддерживает кодировку koi-8, поэтому при выводе данных в браузере с такими символами будут проблемы. Если команда набрана правильно, вы получите ответ:

   Query OK, 1 row affected (0.33 sec)

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

выбор данных

       mysql> SELECT * FROM student;

Команда выбирает все значения из таблицы student. Если необходимо выбрать только часть значений, можно запрос построить несколько иначе:

   mysql> SELECT * FROM student WHERE yare > 2001;

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

   mysql> SELECT * FROM student ORDER BY name;

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

   mysql> SELECT * FROM student ORDER BY binary(lower(name));

удаление данных

   mysql> DELETE FROM student WHERE id_ student = 5;

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

  mysql> DELETE FROM student WHERE id_ student >= 1;

изменение данных

  mysql> update student set student ='Петров', birthday='1993-06-15' where id_student=4;

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

Практические задания:

  1. В режиме командной строки создайте базу данных «users», которая должна содержать информацию о зарегистрированных пользователях сайта. Обязательные поля: имя клиента, логин, пароль, e-mail, дополнительная информация. Вы можете дополнить список полей по своему усмотрению. В режиме командной строки заполните не менее пяти записей в созданной вами таблице.
  2. Напишите sql-запрос выводящих всех пользователей, у которых пустой пароль.
  3. (*) Запустите Denver, запустите утилиту PHPmyAdmin, http://localhost/phpmyadmin. Научитесь создавать базу данных, создавать в них таблицу.

Вопросы для самоконтроля

  1. Как запустить консоль MySQL?
  2. Как узнать, какие базы данных доступны вам на вашем компьютере?
  3. Что означает символ звездочки в запросе на выборку данных?
  4. Как с помощью одного запроса удалить все данные из таблицы?
  5. Какие SQL-запросы вы узнали в этом уроке?
  6. Что происходит на жестком диске компьютера при создании новой базы данных? Новой таблицы?