div.main {margin-left: 20pt; margin-right: 20pt}
MySQL с высоты птичьего полета.
Данная статья не в коем случае не претендует на полное
руководство по работе с MySQL. Напротив, оно предназначено для тех, кому нужно
срочно написать некоторый код на Perl работающий с MySQL.
Для работы с MySQL, воспользуемся одним из возможных средств -
DBI (Data Base Interface). Для этого подключим его к нашей программе.
use DBI;
В самом начале работы, нам нужно подключиться к MySQL серверу а
затем и к БД. Используем для этого такую конструкцию:
$dbh = DBI->connect("DBI:mysql:$basaname", $login, $password);
$basaname = Имя вашей базы.
$login = Логин для доступа к MySQL серверу.
$password = Пароль для доступа к MySQL серверу.
Теперь у нас есть дескриптор $dbh с помощью которого, мы можем
обращаться к нашей БД. Как правило, он используется для SQL запросов.
SQL (Structured Query Language - Язык Структурированных
Запросов) - используется для запросов к БД. Конечно слово "Язык" звучит гордо,
но дочитав эту статью до конца, вы поймете, что SQL - это очень простой язык и
запросы на нем похожи на обычные предложения на английском языке.
Итак. Для того что бы сделать запрос к БД, используется метод
prepare(). Например:
$sth = $dbh->prepare("select NAME from WORKERS where SALARY>500");
Данным запросом, мы просим БД, выдать нам имена всех работников
жалование которых превышает 500 у.е. Таблица с работниками может выглядеть так:
ID |
NAME |
SALARY |
1 |
Pupkin |
16 |
2 |
Ivanov |
600 |
3 |
Petrov |
502 | Называется она, конечно же, WORKERS.
После того, как мы сделали запрос, мы получаем дескриптор
запроса $sth из которого можем извлечь любую интересующую нас информацию.
Заметьте, что при присвоении дескриптору нового значения, информация о
предыдущем запросе теряется. Т.е. если вам нужно сделать запрос и сохранить
только что полученную информацию. Используйте в качестве нового дескриптора
$sth2 и т.д.
Для того что бы извлечь информацию из дескриптора запроса, как
правило используется следующая конструкция:
while (@row = $sth->fetchrow_array){
в $row[0] находится имя работника
}
За каждый такт цикла while, происходит считывание одной записи
из возвращенных MySQL. При этом каждый элемент массива - это одно поле считанной
записи. Обычно количество полей можно предсказать при формировании запроса, но
если это все таки не возможно (некоторые универсальные скрипты) используйте
переменную $#row в ней хранится индекс последнего элемента массива.
В своем запросе, мы можем перечислять необходимые поля явно:
select NAME, PHONE, AGE from WORKERS where SALARY>500;
а так же использовать следующую конструкцию:
select * from WORKERS where SALARY>500;
в этом случае, из базы будут выбраны все поля. Неудобство
данного способа заключается в том, что нам необходимо знать порядок полей в
базе, а это е всегда возможно.
Иногда возникает необходимость как-то отсортировать данные. Для
этого используется конструкция ORDER BY. Например:
select * from WORKERS where SALARY>500 ORDER BY NAME;
Сортировать по имени. Хочу заметить, что далеко не на всех
серверах работает сортировка русских символов. Дело в том, что на самом деле
компьютеру алфавит не известен и сортирует он по кодам соответствующих символов
и если в кодировке Win1251 коды символов имеют порядок, то в кодировке KOI
(преимущественно используемой на Linux серверах) порядок не наблюдается.
Если вам необходимо проделать обратную сортировку, то к запросу
добавляется слово DESC
select * from WORKERS where SALARY>500 ORDER BY NAME DESC;
Помимо функции чтения из БД, бывают очень полезны функции
удаления (delete) и изменения (update) и добавления (insert) записи. Рассмотрим
их более подробно. INSERT
Функция insert предназначена для
вставки в БД записи. Например так:
insert into WORKERS values (0, "Vasily A. Pupkin", "555-44-33", 512);
В скобках через запятую перечислены значения каждого поля. В
данном случае, нам так же необходимо знать порядок полей. Самая распространенная
ошибка с функцией insert - это не соответствие типов. Литерные значения и даты,
всегда должны указываться в скобках. Очень часто запись имеет уникальный ID (как
правило он хранится в первом поле). БД берет на себя заботу о том, что бы ID
действительно оказался уникальным, поэтому нам достаточно указать на его месте
0, а система сама вычислит и подставит туда нужное значение.
DELETE
Функция delete предназначена для удаления записи или записей.
Как правило, используется с некоторым условием, поскольку без условия происходит
удаление всех записей, а это довольно редкое желание со стороны программиста.
Пример:
delete from WORKERS where NAME="Vasily A. Pupkin";
Данный запрос удаляет из базы запись поле NAME у которой равно
"Vasily A. Pupkin". Если таких записей будет несколько, они все будут удалены.
Именно поэтому лучше производить удаление по ID если точно не известно может ли
быть еще одна запись с подобным значением. Условия могут быть более
сложными. Для этого используются слова OR и AND.
delete from WORKERS where NAME="Vasily A. Pupkin" or SALARY < 10;
Удаляем всех Пупкиных и тех у кого жалование меньше 10 у.е.
UPDATE
Функция update изменяет запись или записи в зависимости от
условия. Например:
update WORKERS set SALARY=512 where NAME="Vasily A. Pupkin";
В данном примере, мы повысили Пупкину жалование.
Обращаться с функцией update нужно аккуратно, поскольку если не
указать условие, будут изменены все (!) записи. Например:
update WORKERS set SALARY=120;
У всех одинаковая зарплата - 120 у.е.
Заключение
В настоящее время большинство хостинг-провайдеров предоставляют
всевозможные веб-интерфейсы для формирования и работы с БД. Именно по этой
причине, в статье совсем не рассматривался вопрос создания БД "вручную". Однако
автор не считает веб-интерфейсы лучшим способом работы с БД и поэтому в
следующей статье будут рассмотрены приемы работы с БД MySQL "в ручную".
Philip A. Koryaka e-mail:mailto:flp@mail.ru?subject=webmaster(cgi) Copyright
© 2001
|