Оптимальное использование MySQL. MySQL является пакетом с открытыми исходными текстами

Вайбер на компьютер 08.05.2019
Вайбер на компьютер

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

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

Ещё один момент: что такое реляционная база данных? Реляционная - значит основанная на таблицах. Знаменитый редактор электронных таблиц Excel от Microsoft фактически является редактором реляционных баз данных.

Подключение к серверу MySQL

Для подключения к серверу MySQL в PHP используется функция mysqli_connect() . Данная функция получает три аргумента: имя сервера, имя пользователя и пароль.

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

Код подключения к серверу MySQL:

$link = mysqli_connect("localhost", "root", "");

В данном случае я работаю на локальном компьютере на Denwere, поэтому имя хоста localhost, имя пользователя root, а пароля нет.

Соединение также нужно закрыть, после завершения работы с MySQL. Для закрытия соединения используется функция mysqli_close() . Расширяем пример:

$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Error"); mysqli_close($link);

Тут мы проверели идентификатор подключения на истинность, если с нашим подключением что-то не так, то и программа выполняться не будет, функция die() остановит её выполнение и выведет в браузер сообщение об ошибке.

Ошибки подключения

Для проверки подключения используются следующие функции:

  • mysqli_connect_errno() - возвращает код ошибки последней попытки соединения. При отсутствие ошибок возвращает ноль.
  • mysqli_connect_error() - возвращает описание последней ошибки подключения к серверу MySQL.
define ("HOST", "localhost"); define ("DB_USER", "root"); define ("DB_PASSWORD", ""); define ("DB", "tester"); $link = mysqli_connect(HOST, DB_USER, DB_PASSWORD, DB); /* проверка соединения */ if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s\n", mysqli_connect_error()); exit(); } else { printf("Удалось подключиться: %s\n", mysqli_get_host_info($link)); }

Функция mysqli_get_host_info() возвращает строку, содержащую тип используемого соединения.

Также обратите внимание, при помощи команды define я все параметры подключения сохранил в константах. Когда вы будете писать большие проекты, и подключатся к серверу MySQL будут много файлов, то удобно хранить параметры соединения в отдельном файле и вставлять его при помощи функции include или require .

Выбор базы данных

На сервере MySQL может быть несколько баз данных. Первым делом нам нужно выбрать для работы нужную нам базу. В PHP для этого в функции mysqli_connect() есть ещё один параметр - имя базы данных.

Я создал у себя на компьютере через phpMyAdmin с именем tester. Подключаемся к ней:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); mysql_close($link);

Итак, мы выбрали для работы базу данных. Но как нам известно, реляционная база данных состоит из таблиц, а в нашей базе данных таблиц пока что нет. База данных создаётся пустая, без таблиц. Таблицы в неё нужно добавить отдельно. Вот давайте добавим в неё таблицу средствами PHP.

Создаём таблицу

В названии баз данных MySQL часть SQL обозначает Structured Query Language, что переводится как структурированный язык запросов. На языке SQL мы будем писать запросы и из программы PHP посылать их серверу MySQL.

Чтобы создать таблицу нам просто нужно указать команду CREATE TABLE . Давайте создадим таблицу с именем users в столбцах которой будут храниться логины (столбец login) и пароли (столбец password) пользователей.

$query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))";

В этом коде мы присвоили переменной $query строку текста, которая представляет собой запрос SQL. Мы создаём таблицу с именем users, которая содержит два столбца login и password, у обоих тип данных VARCHAR(20). О типах данных мы поговорим позже, сейчас только отмечу, что VARCHAR(20) - это строка максимальной длины 20 символов.

Чтобы отправить наш запрос на сервер MySQL мы используем PHP функцию mysqli_query() . Эта функция возвращает положительное число, если операция прошла успешно и false, если произошла ошибка (синтаксис запроса ошибочный или у программы нет прав на выполнение запроса).

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; mysqli_query($query); mysqli_close($link);

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

У этого скрипта есть один недостаток - он ничего не выводит в браузер. Давайте добавим сообщение:

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; if (mysqli_query($query)) echo "Таблица создана."; else echo "Таблица не создана."; mysqli_close($link);

Если мы повторно запустим этот скрипт на выполнение, то увидим в браузере сообщение: "Таблица не создана". Дело в том, что таблица была создана при первом запуске, а повторно невозможно создать таблицу с таким же именем. Мы столкнулись с ситуацией возникновения ошибки, значит настало время поговорить об обработке ошибок при работе с MySQL.

Обработка ошибок

При отладке программы нам может понадобиться точная информация о ошибке. Когда в MySQL происходит ошибка, то сервер базы данных устанавливает номер ошибки и строку с её описанием. Для доступа к этим данным в PHP есть специальные функции.

  • mysqli_errno() - возвращает номер ошибки.
  • mysqli_error() - возвращает строку с описанием ошибки.

Теперь давайте добавим функцию mysql_error() в наш скрипт:

$link = mysql_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; if (mysqli_query($query)) echo "Таблица создана."; else echo "Таблица не создана: ".mysqli_error(); mysqli_close($link);

Теперь наш скрипт вернёт в браузер строку: "Таблица не создана: Table "users" already exists".

Удаление таблицы

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

Для удаления таблицы используется команда DROP TABLE , за которой следует имя таблицы.

$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "DROP TABLE users"; if (!mysqli_query($query)) echo "Ошибка при удалении таблицы: ".mysqli_error(); else echo "Таблица удалена."; mysqli_close($link);

Итоги

Итак, мы освоили основы MySQL. Что мы научились делать:

  • Подключаться к базе данных MySQL при помощи функции mysqli_connect() .
  • Закрывать соединение с сервером MySQL при помощи функции mysqli_close() .
  • Отправлять SQL запросы серверу MySQL при помощи функции mysqli_query() .
  • Мы узнали SQL запрос создания таблицы: create table.
  • Мы узнали SQL запрос удаления таблицы: drop table.
  • Мы узнали как обрабатывать ошибки при помощи функций mysqli_errno() и mysqli_error() .

Потом мы подробно рассмотрим типы данных MySQL.

Читаем следующий урок:

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

Самое популярное СУБД для работы с веб-приложениями - MySQL. Сегодня практически все веб-сайты, которые работают в сети взаимодействуют с СУБД MySQL. Конечно MySQL не единственное СУБД, есть ряд других, но сложилось так, что самое популярное. Поэтому разработчикам веб-приложений необходимо освоить СУБД MySQL и язык SQL.

Не нужно покупать или качать десятки книг, все равно вы их сразу не прочтете, а если уж осилите, то огромного результата не даст. Необходим результат, его мы можем получить только когда будем, что-то делать, а не читать постоянно книги. Читать книги - хорошо, но еще лучше практиковаться, только так мы получаем опыт и навыки.

Выберите, одну толковую книгу по изучении MySQL. Сосредоточьтесь на этой книге, прочтите ее, закрепите каждую главу на практике. Если, что-то слабо усвоилось, практикуйтесь, не бойтесь вернуться и еще несколько раз прочитать и сделать. Рекомендую прочесть книгу Алана Бьюли «Изучаем SQL», лично мне эта книга очень помогла. Книга написана простым языком, для простых людей в книге доступным языком описывается как установить сервер MySQL, как работают операторы, фильтры и т.д. Подробнее об этой книге читайте .

Если нету еще навыков работы с MySQL, нету понимания типов данных и операторов SQL, не рекомендую начинать осваивать в phpMyAdmin. Это не значить, что phpMyAdmin - плохо. Главная задача освоить SQL и MySQL - лучше делать через консольное приложение.

Скачайте с официального сайта бесплатно сервер MySQL, установите его себе на компьютер и работайте. Например: если взять книгу Алана Бьюли «Изучаем SQL» в ней подробный курс SQL и работа с MySQL, все примеры работы через консольное приложение.

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

Ваши инструменты : выбранная книга, сервер MySQL, практика, практика и еще раз практика.

Имея опыт работы через консольное приложение, разработчику не составить сложности работать в том же самом phpMyAdmin, ему не составит сложности писать все команды SQL. Это нужно и важно, потому, что управлять и создавать базу данных можно в phpMyAdmin толком и не зная SQL. Но помните SQL - запросы писать нужно будет при разработке веб-приложений, от этого не уйти.

Теги: sql, mysql, базы данных

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

Базы данных: основные понятия

Оглавление документа

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

Например, мы используем записную книжку для хранения номеров телефонов своих друзей и планирования своего времени. Телефонная книга содержит информацию о людях, живущих в одном городе. Все это своего рода базы данных. Ну а раз это базы данных, то посмотрим, как в них хранятся данные. Например, телефонная книга представляет собой таблицу (табл. 10.1).

В этой таблице данные – это собственно номера телефонов, адреса и ФИО., т.е. строки «Иванов Иван Иванович», «32-43-12 » и т.п., а названия столбцов этой таблицы, т.е. строки «ФИО», «Номер телефона» и «Адрес» задают смысл этих данных, их семантику.

Таблица 10.1. Пример базы данных: телефонная книга

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

Для точности дадим определение базы данных, предлагаемое Глоссарий.ру

База данных – это совокупность связанных данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, независимая от прикладных программ. База данных является информационной моделью предметной области. Обращение к базам данных осуществляется с помощью системы управления базами данных (СУБД). СУБД обеспечивает поддержку создания баз данных, централизованного управления и организации доступа к ним различных пользователей.

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

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

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

Примеры реляционных СУБД: Mysql, PostgreSql. В основу объектной модели положена концепция объектно-ориентированного программирования, в которой данные представляются в виде набора объектов и классов, связанных между собой родственными отношениями, а работа с объектами осуществляется с помощью скрытых (инкапсулированных) в них
методов.

Примеры объектных СУБД: Cache, GemStone (от Servio Corporation), ONTOS (ONTOS).

В последнее время производители СУБД стремятся соединить два этих подхода и проповедуют объектно-реляционную модель представления данных. Примеры таких СУБД – IBM DB2 for Common Servers, Oracle8.

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

1. Ключи

Для начала давайте подумаем над таким вопросом: какую информацию нужно дать о человеке, чтобы собеседник точно сказал, что это именно тот человек, сомнений быть не может, второго такого нет? Сообщить фамилию, очевидно, недостаточно, поскольку существуют однофамильцы. Если собеседник человек, то мы можем приблизительно объяснить, о ком речь, например вспомнить поступок, который совершил тот человек, или еще как-то. Компьютер же такого объяснения не поймет, ему нужны четкие правила, как определить, о ком идет речь. В системах управления базами данных для решения такой задачи ввели понятие первичного ключа.

Первичный ключ (primary key, PK) – минимальный набор полей, уникально идентифицирующий запись в таблице. Значит, первичный ключ – это в первую очередь набор полей таблицы, во-вторых, каждый набор значений этих полей должен определять единственную запись (строку) в таблице и, в-третьих, этот набор полей должен быть минимальным из всех обладающих таким же свойством.

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

Например, в нашей таблице (см. выше) ФИО и адрес позволяют однозначно выделить запись о человеке. Если же говорить в общем, без связи с решаемой задачей, то такие знания не позволяют точно указать на единственного человека, поскольку существуют однофамильцы, живущие в разных городах по одному адресу. Все дело в границах, которые мы сами себе задаем. Если считаем, что знания ФИО, телефона и адреса без указания города для наших целей достаточно, то все замечательно, тогда поля ФИО и адрес могут образовывать первичный ключ. В любом случае проблема создания первичного ключа ложится на плечи того, кто проектирует базу данных (разрабатывает структуру хранения данных). Решением этой проблемы может стать либо выделение характеристик, которые естественным образом определяют запись в таблице (задание так называемого логического, или естественного, PK), либо создание дополнительного поля, предназначенного именно для однозначной идентификации записей в таблице (задание так называемого суррогатного, или искусственного, PK).

Примером логического первичного ключа является номер паспорта в базе данных о паспортных данных жителей или ФИО и адрес в телефонной книге (таблица выше). Для задания суррогатного первичного ключа в нашу таблицу можно добавить поле id (идентификатор), значением которого будет целое число, уникальное для каждой строки таблицы. Использование таких суррогатных ключей имеет смысл, если естественный первичный ключ представляет собой большой набор полей или его выделение нетривиально.

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

Например, у нас есть три таблицы: содержащая информацию об исторических личностях (Persons), содержащая информацию об их изобретениях (Artifacts) и содержащая изображения как личностей, так и артефактов (Images) (рис 10.1).

Первичным ключом во всех этих таблицах является поле id (идентификатор). В таблице Artifacts есть поле author, в котором записан идентификатор, присвоенный автору изобретения в таблице Persons. Каждое значение этого поля является внешним ключом для первичного ключа таблицы Persons. Кроме того, в таблицах Persons и Artifacts есть поле photo, которое ссылается на изображение в таблице Images. Эти поля также являются внешними ключами для первичного ключа таблицы Images и устанавливают однозначную логическую связь Persons-Images и Artifacts-Images. То есть если значение внешнего ключа photo в таблице личности равно 10, то это значит, что фотография этой личности имеет id=10 в таблице изображений. Таким образом, внешние ключи используются для организации связей между таблицами базы данных (родительскими и дочерними) и для поддержания ограничений ссылочной целостности данных.

2. Индексирование

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

Для этого (для оптимизации производительности запросов) производят индексирование некоторых полей таблицы. Использовать индексы полезно для быстрого поиска строк с указанным значением одного столбца. Без индекса чтение таблицы осуществляется по всей таблице, начиная с первой записи, пока не будут найдены соответствующие строки. Чем больше таблица, тем больше накладные расходы. Если же таблица содержит индекс по рассматриваемым столбцам, то база данных может быстро определить позицию для поиска в середине файла данных без просмотра всех данных. Это происходит потому, что база данных помещает проиндексированные поля поближе в памяти, так, чтобы можно было побыстрее найти их значения. Для таблицы, содержащей 1000 строк, это будет как минимум в 100 раз быстрее по сравнению с последовательным перебором всех записей. Однако в случае, когда необходим доступ почти ко всем 1000 строкам, быстрее будет последовательное чтение, так как при этом не требуется операций поиска по диску. Так что иногда индексы бывают только помехой. Например, если копируется большой объем данных в таблицу, то лучше не иметь никаких индексов. Однако в некоторых случаях требуется задействовать сразу несколько индексов (например, для обработки запросов к часто используемым таблицам).

Если говорить о Mysql, то там существует три вида индексов: PRIMARY, UNIQUE, и INDEX, а слово ключ (KEY) используется как синоним слова индекс (INDEX). Все индексы хранятся в памяти в виде B-деревьев.

PRIMARY – уникальный индекс (ключ) с ограничением, что все индексированные им поля не могут иметь пустого значения (т.е. они NOT NULL). Таблица может иметь только один первичный индекс, но он может состоять из нескольких полей.

UNIQUE – ключ (индекс), задающий поля, которые могут иметь только уникальные значения.

INDEX – обычный индекс (как мы описали выше). В Mysql, кроме того, можно индексировать строковые поля по заданному числу символов от начала строки.

3. СУБД Mysql

Продолжим разговор о СУБД Mysql. Mysql – это реляционная система управления базами данных. То есть данные в ее базах хранятся в виде логически связанных между собой таблиц, доступ к которым осуществляется с помощью языка запросов SQL. Mysql – свободно распространяемая система, т.е. платить за ее применение не нужно. Кроме того, это достаточно быстрая, надежная и, главное, простая в использовании СУБД, вполне подходящая для не слишком глобальных проектов.

Работать с Mysql можно не только в текстовом режиме, но и в графическом. Существует очень популярный визуальный интерфейс (кстати, написанный на PHP) для работы с этой СУБД. Называется он PhpMyAdmin. Этот интерфейс позволяет значительно упростить работу с базами данных в Mysql.

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

Перед тем как переходить к детальному изучению языка SQL, несколько слов об установке Mysql и подготовке к работе. Если вы не собираетесь заниматься администрированием сервера, то информация, приведенная ниже, пригодится вам только для общего развития. Итак, устанавливается Mysql очень просто – автоматически, пару раз нажмите OK, и все. После этого вы можете зайти в директорию, где лежат файлы типа Mysql.exe, Mysqld.exe и т.п. (у нас под Windows XP это c:\Mysql\bin) Последний файл запускает Mysql-сервер. В некоторых системах сервер запускается в виде сервиса. После запуска сервера следует запустить Mysql-клиент, запустив программу Mysql.exe. Здесь даже пароля не спросят. Более того, если вы наберете shell> Mysql.exe -u root или shell>Mysql -u root Mysql то получите все права администратора Mysql сервера. Кстати, выполнять эти команды надо, находясь в той директории, где лежат файлы Mysql.exe.
Для начала, не вдаваясь в подробности команд, исправим эти два недочета (отсутствие пароля у администратора и возможность входа анонимным пользователям):

Все данные о пользователях Mysql хранит в таблице user в специальной базе данных Mysql, доступ к которой имеет только администратор сервера. Поэтому, чтобы изменить какой-либо пароль, нужно изменить эту таблицу. Пароль задается с помощью функции PASSWORD, которая кодирует введенные данные. Кроме изменения пароля администратора, нужно еще удалить всех пользователей, не имеющих логина (команда DELETE). Команда Flush Privileges заставляет вступить в действие изменения, произошедшие в системной базе данных (Mysql).

Теперь создадим базу данных, с которой будем работать (мы все еще работаем как администратор сервера):
Mysql>create database book;

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

Mysql> show tables
->
->

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

Mysql> GRANT ALL PRIVILEGES ON book.* TO nina@localhost
IDENTIFIED BY "123";

Команда GRANT наделяет пользователя nina, зашедшего на сервер с этой же машины (c localhost) и идентифицируемого паролем «123», определенными правами (в данном случае всеми) на все таблицы базы данных book. Теперь мы можем выйти и зайти как пользователь nina с соответствующим паролем:

shell>Mysql -u nina -p
Enter password : ***
Welcome to the Mysql monitor!...
Mysql>

Если вы собираетесь пользоваться базой данных на чужом сервере, то его администратор проделает все описанные выше действия за вас, т.е. все настроит и создаст пользователя и базу данных. В следующей главе описаны команды языка SQL, которые пригодятся для работы с данными, хранящимися в СУБД Mysql.

4.

5.

6.

7. Построение интерфейса для добавления информации

Итак, у нас есть какая-то таблица в базе данных. Чтобы построить интерфейс для добавления информации в эту таблицу, нужно ее структуру (т.е. набор ее полей) отобразить в html-форму.

Разобьем эту задачу на следующие подзадачи:

  • установка соединения с БД;
  • выбор рабочей БД;
  • получение списка полей таблицы;
  • отображение полей в html-форму.
После этого данные, введенные в форму, нужно записать в базу данных.

Рассмотрим все эти задачи по порядку.

8. Установка соединения

Итак, первое, что нужно сделать, - это установить соединение с базой данных.

Воспользуемся функцией Mysql_connect.

Синтаксис Mysql_connect

ресурс Mysql_connect ([строка server
[, строка username [, строка password
[, логическое new_link
[, целое client_flags]]]]])

Данная функция устанавливает соединение с сервером Mysql и возвращает указатель на это соединение или FALSE в случае неудачи.

Для отсутствующих параметров устанавливаются следующие значения по умолчанию:
server = "localhost:3306"
username = имя пользователя владельца процесса сервера
password = пустой пароль

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

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

Параметр client_flags - это комбинация следующих констант:

MYSQL_CLIENT_COMPRESS (использовать протокол сжатия),
MYSQL_CLIENT_IGNORE_SPACE (позволяет вставлять пробелы после имен функций), MYSQL_CLIENT_INTERACTIVE (ждать interactive_timeout секунд - вместо wait_timeout - до закрытия соединения).

Параметр new_link появился в PHP 4.2.0, а параметр client_flags - в PHP 4.3.0.

Соединение с сервером закрывается при завершении исполнения скрипта, если оно до этого не было закрыто с помощью функции Mysql_close().

Итак, устанавливаем соединение с базой данных на локальном сервере для пользователя nina с паролем “123”:

$conn = Mysql_connect (

or die("Невозможно установить
соединение: "
. Mysql_error ());
echo "Соединение установлено" ;
Mysql_close ($conn );
?>

Действие Mysql_connect равносильно команде

shell>Mysql -u nina -p123

9. Выбор базы данных

После установки соединения нужно выбрать базу данных, с которой будем работать. Наши данные хранятся в базе данных book. В Mysql выбор базы данных осуществляется с помощью команды use:

Mysql>use book;


В PHP для этого существует функция Mysql_select_db.

Синтаксис Mysql_select_db:

Логическое

Mysql_select_db (строка database_name [, ресурс link_identifier])

Эта функция возвращает TRUE в случае успешного выбора базы данных и FALSE

  • в противном случае.
Сделаем базу данных book рабочей:

$conn = Mysql_connect (
"localhost" , "nina" , "123" )
or die("Невозможно установить
соединение: "
. Mysql_error ());
echo "Соединение установлено" ;
Mysql_select_db ("book" );
?>

10. Получение списка полей таблицы

Теперь можно заняться собственно решением задачи. Как получить список полей таблицы? Очень просто. В PHP и на этот случай есть своя команда - Mysql_list_fields.

10.1. Синтаксис Mysql_list_fields

ресурс Mysql_list_fields (
строка database_name,
строка table_name
[, ресурс link_identifier])

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

Функция Mysql_field_name возвращает имя поля, полученного в результате выполнения запроса. Функция Mysql_field_len возвращает длину поля. Функция Mysql_field_type возвращает тип поля, а функция Mysql_field_flags возвращает список флагов поля, записанных через пробел. Типы поля могут быть int, real, string, blob и т.д. Флаги могут быть not_null, primary_key, unique_key, blob,
auto_increment и т.д.

Синтаксис у всех этих команд одинаков:

строка Mysql_field_name (ресурс result, целое field_offset)
строка Mysql_field_type (ресурс result, целое field_offset)
строка Mysql_field_flags (ресурс result, целое field_offset)
строка Mysql_field_len (ресурс result, целое field_offset)

Здесь result - это идентификатор результата запроса (например, запроса, отправленного функциями Mysql_list_fields или Mysql_query (о ней будет рассказано позднее)), а field_offset - порядковый номер поля в результате.

Вообще говоря, то, что возвращают функции типа Mysql_list_fields или Mysql_query, представляет собой таблицу, а точнее, указатель на нее. Чтобы получить из этой таблицы конкретные значения, нужно задействовать специальные функции, которые построчно читают эту таблицу. К таким функциям и относятся Mysql_field_name и т.п. Чтобы перебрать все строки в таблице результата выполнения запроса, нужно знать число строк в этой таблице. Команда Mysql_num_rows(ресурс result) возвращает число строк во множестве результатов
result.

А теперь попробуем получить список полей таблицы Artifacts (коллекция экспонатов).

$conn = Mysql_connect (
"localhost" , "nina" , "123" )
or die("Невозможно установить
соединение: "
. Mysql_error ());
echo "Соединение установлено" ;
Mysql_select_db ("book" );
$list_f = Mysql_list_fields (
"book" , "Artifacts" , $conn );
$n = Mysql_num_fields ($list_f );
for($i = 0 ; $i < $n ; $i ++){



$flags_str = Mysql_field_flags (
$list_f , $i );
echo "
Имя поля: " . $name_f ;
echo "
Тип поля: " . $type ;
echo "
Длина поля: " . $len ;
echo "
Строка флагов поля: "
.
$flags_str . "


" ;
}
?>

В результате должно получиться примерно вот что (если в таблице всего два поля, конечно):

Имя поля: id
Тип поля: int
Длина поля: 11
Строка флагов поля:
not_null primary_key auto_increment
Имя поля: title
Тип поля: string
Длина поля: 255
Строка флагов поля:
Отображение списка полей в html-форму

Теперь немножко подкорректируем предыдущий пример. Будем не просто выводить информацию о поле, а отображать его в подходящий элемент html- формы. Так, элементы типа BLOB переведем в textarea (заметим, что поле description, которое мы создавали с типом TEXT, отображается как имеющее тип BLOB), числа и строки отобразим в текстовые строки ввода , а элемент, имеющий метку автоинкремента, вообще не будем отображать, поскольку его значение устанавливается автоматически.

Все это решается довольно просто, за исключением выделения из списка флагов флага auto_increment. Для этого нужно воспользоваться функцией explode.

Синтаксис explode:

массив explode(строка separator, строка string [, int limit ])

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

В нашем случае в качестве разделителя нужно взять пробел “ ", а в качестве исходной строки для разбиения - строку флагов поля.

Итак, создадим форму для ввода данных в таблицу Artifacts:

$conn = Mysql_connect ("localhost" , "nina" , "123" );
// устанавливаем соединение
$database = "book" ;
$table_name = "Artifacts" ;
Mysql_select_db ($database ); // выбираем базу данных для
// работы

// число строк в результате
// предыдущего запроса (т.е. сколько всего
// полей в таблице Artifacts)
echo "

" ;
// создаем форму для ввода данных
echo "

Add new row in
$table_name
"
;
echo "" ;
// для каждого поля получаем его имя, тип, длину и флаги
for($i = 0 ; $i < $n ; $i ++){
$type = Mysql_field_type ($list_f , $i );
$name_f = Mysql_field_name ($list_f , $i );
$len = Mysql_field_len ($list_f , $i );
$flags_str = Mysql_field_flags ($list_f , $i );
// из строки флагов делаем массив,
// где каждый элемент массива - флаг поля
$flags = explode (" " , $flags_str );
foreach ($flags as $f ){
if ($f == "auto_increment" ) $key = $name_f ;
// запоминаем имя автоинкремента
}
/* для каждого поля, не являющегося автоинкрементом, в
зависимости от его типа выводим подходящий элемент формы */
if ($key <> $name_f ){
echo "" ;
switch ($type ){
case "string" :
$w = $len / 5 ;
echo "" ;
break;
case "int" :
$w = $len / 4 ;
echo "" ;
break;
case "blob" :
echo "" ;
break;
}
}
echo "" ;
}
echo "

" . $name_f . "
size = $w >size = $w >
" ;
echo "" ;
echo "" ;
?>

Если открытые соединения отсутствуют, функция пытается соединиться с СУБД, аналогично функции Mysql_connect() без параметров. Результат запроса буферизируется.

Замечание: строка запроса НЕ должна заканчиваться точкой с запятой.

Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, Mysql_query() возвращает указатель на результат запроса, или FALSE, если запрос не был выполнен. В остальных случаях Mysql_query() возвращает TRUE, если запрос выполнен успешно, и FALSE - в случае ошибки. Значение, не равное FALSE, говорит о том, что запрос был выполнен успешно. Оно не говорит о количестве затронутых или возвращенных рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда. Mysql_query() также считается ошибочным и вернет FALSE, если у пользователя недостаточно прав для работы с указанной в запросе таблицей.

Итак, теперь мы знаем, как отправить запрос на вставку строк в базу данных.
$list_f = Mysql_list_fields ($database , $table_name );
// получаем список полей в базе
$n = Mysql_num_fields ($list_f ); // число строк в результате
// предыдущего запроса
// составим один запрос сразу для всех полей таблицы
$sql = "INSERT INTO $table_name SET " ; // начинаем создавать
// запрос, перебираем все поля таблицы
for($i = 0 ; $i < $n ; $i ++){
$name_f = Mysql_field_name ($list_f , $i ); // вычисляем имя поля
$value = $_POST [ $name_f ]; // вычисляем значение поля
$j = $i + 1 ;
$sql = $sql . $name_f . " = "$value"" ; // дописываем в
// строку $sql пару имя=значение
if ($j <> $n ) $sql = $sql . ", " ; // если поле не
// последнее в списке, то ставим запятую
}
// перед тем как записывать что-то в базу,
// можно посмотреть, какой запрос получился
//echo $sql;
$result = Mysql_query ($sql , $conn ); // отправляем запрос
// выводим сообщение успешно ли выполнен запрос
if (! $result ) echo " Can"t add ($table_name) " ;
else echo "Success!
" ;
?>

Листинг 11.0.2. insert.php

Итак, задачу добавления данных с помощью web-интерфейса мы решили. Однако тут есть одна тонкость. При решении мы не учитывали тот факт, что значения некоторых полей (author, photo) должны браться из других таблиц (Persons, Images). Поскольку Mysql с внешними ключами не работает, этот момент остается на совести разработчиков системы, т.е. на нашей совести. Нужно дописать программу таким образом, чтобы была возможность вводить в такие поля правильные значения. Но мы делать этого не будем, поскольку задача лекции состоит в том, чтобы познакомить читателя с элементами технологии, а не в том, чтобы создать работающую систему. Кроме того, имеющихся у читателя знаний вполне достаточно, чтобы решить эту проблему самостоятельно. Мы же обратимся к другой задаче - отображение данных, хранящихся в базе данных СУБД Mysql.

12.

13.

14.

15. Литература

http://mysql.ru/docs/man/
http://www.intuit.ru/department/database/mysql/

» Почему используют MySQL?

Навигация по Самоучителю: 1.1 Что такое MySQL? 1.2 Почему используют MySQL? 1.3 Насколько стабилен MySQL? 1.4 Насколько большими могут быть таблицы MySQL? 1.5 MySQL, MySQL AB, MySQL-MAX: что это такое? 1.6 Под какими операционными системами работает MySQL? 1.7 Дистрибутивы MySQL 1.8 Подсказки командной строки MySQL 2.1 Введение в MySQL 2.2 Соединение с сервером MySQL 2.3 Ввод запросов в MySQL 2.4 Создание и использование баз данных 2.5 Создание базы данных MySQL 2.6 Создание таблицы MySQL 2.7 Загрузка данных в таблицу MySQL 2.8 Выбор всех данных из таблицы MySQL 2.9 Выбор конкретных строк из таблицы MySQL 2.10 Выбор произвольных столбцов из таблицы MySQL 2.11 Сортировка строк из таблицы MySQL 2.12 Вычисление дат в таблице MySQL 2.13 Работа со значениями NULL в таблице MySQL 2.14 Сравнение по шаблону. SQL-шаблоны. 2.15 Подсчет строк в SQL-шаблоны. Функция COUNT() 2.16 Использование нескольких таблиц в одном SQL запросе 2.17 Получение информации о базах данных MySQL и таблицах 2.18 Примеры общих запросов в MySQL 2.19 Максимальное значение для столбца MySQL 2.20 В какой строке хранится максимум некоего столбца MySQL 2.21 Максимум столбца в группе MySQL 2.22 В какой строке MySQL находится максимальное значение по группе? 2.23 Применение переменных пользователя в MySQL 2.24 Использование клиента MySQL в пакетном режиме 3.1 Строки в MySQL 3.2 Числа в MySQL. Как писать числа в MySQL? 3.3 Шестнадцатеричные значения в MySQL 3.4 Значения NULL в MySQL 3.5 Имена баз данных, таблиц, индексов, столбцов и псевдонимов в MySQL 3.6 Чувствительность к регистру в именах в MySQL 3.7 Пользовательские переменные в MySQL 3.8 Комментарии в MySQL 3.9 Зарезервированные слова MySQL 4.1 Резервирование баз данных MySQL 4.2 Синтаксис BACKUP TABLE в MySQL 4.3 Синтаксис RESTORE TABLE в MySQL 4.4 Синтаксис CHECK TABLE в MySQL 4.5 Синтаксис REPAIR TABLE в MySQL 4.6 Синтаксис OPTIMIZE TABLE в MySQL 4.7 Синтаксис ANALYZE TABLE в MySQL 4.8 Синтаксис FLUSH в MySQL 4.9 Синтаксис KILL в MySQL 4.10 Синтаксис SHOW в MySQL 4.11 Синтаксис SHOW TABLE STATUS в MySQL 4.12 Синтаксис SHOW STATUS в MySQL 4.13 Синтаксис SHOW VARIABLES в MySQL 4.14 back_log 4.15 character_set, character_sets, concurrent_inserts 4.16 connect_timeout, delay_key_write, delayed_insert_limit 4.17 delayed_insert_timeout, delayed_queue_size, flush_time 4.18 have_raid, have_ssl, init_file 4.19 interactive_timeout, join_buffer_size, key_buffer_size 4.20 language, log_bin, long_query_time 4.21 lower_case_table_names, max_allowed_packet, max_binlog_cache_size 4.22 max_connections, max_connect_errors, max_delayed_threads 4.23 max_join_size, max_sort_length, max_user_connections 4.24 max_tmp_tables, max_write_lock_count, myisam_sort_buffer_size 4.25 mуisam_max_extra_sоrt_file_size, myisam_max_sort_file_size, net_buffer_length 4.26 net_read_timeout, net_retry_count, net_write_timeout 4.27 open_files_limit, port, record_buffer 4.28 protocol_version, record_rnd_buffer, query_buffer_size 4.29 safe_show_databases, skip_networking, skip_show_databases 4.30 socket, sort_buffer, skip_show_databases 4.31 thread_cache_size, tmp_table_size, wait_timeout 4.32 Синтаксис SHOW PROCESSLIST в MySQL 4.33 Синтаксис SHOW GRANTS в MySQL 4.34 Синтаксис SHOW CREATE TABLE в MySQL 4.35 Файл опций my.cnf в MySQL 5.1 Типы столбцов в MySQL 5.2 Числовые типы в MySQL 5.3 Типы даты и времени в MySQL 5.4 Проблема Y2K (2000 года) и типы Date в MySQL 5.5 Типы DATETIME, DATE и TIMESTAMP в MySQL 5.6 Тип TIME в MySQL 5.7 Тип YEAR в MySQL 5.8 Строковые типы CHAR и VARCHAR в MySQL 5.9 Строковые типы BLOB и TEXT в MySQL 5.10 Строковый тип ENUM в MySQL 5.11 Строковый тип SET в MySQL 5.12 Выбор правильного типа для столбца MySQL 5.13 Использование типов столбцов из других СУБД для MySQL 5.14 Требования столбцов MySQL к памяти 6.1 Функции для использования MySQL в SELECT и WHERE 6.2 Нетипизированный оператор Скобки в MySQL 6.3 Нетипизированный Оператор сравнения в MySQL 6.4 Логические операторы MySQL 6.5 Функции ветвления в MySQL 6.6 Строковые функции в MySQL

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

При постоянной разработке MySQL сегодня предлагает богатый и очень полезный набор функций. Простота, быстродействие и надежность делают MySQL очень подходящим для обращения к базам данных из Internet. Очень важна поддержка поистине огромных объемов данных. Известен случай использования MySQL на 60000 таблиц, суммарно хранящих около 5000000000 строк.

MySQL является системой «клиент-сервер»

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

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

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

MySQL-является полностью многопоточной системой

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

MySQL является пакетом с открытыми исходными текстами

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

MySQL бесплатен в большинстве случаев

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

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

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

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

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

В MySQL принято, что тип данных присваивается столбцу в таблице и распространяется на все ячейки в этом столбце. То есть, если первому столбцу присвоен некий тип (например, char), то это значит, что первое поле любой записи в этой таблице всегда будет иметь именно тип char и никакой иной.

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

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

Таблица также имеет тип и атрибуты . От этого зависит набор возможностей, доступных при работе с этой таблицей, а также логика ее обработки сервером. Это будет подробно рассмотрено позднее.

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

Те данные, по которым производится поиск записи, называются ключом . Если в записи несколько полей, то найти ее можно по разным ключам, каждый для своего поля. Тот ключ, по которому с наибольшей вероятностью будет производиться поиск записи, называется первичным ключом (PRIMARYKEY). Ключ может относиться не только к одному полю, а сразу к нескольким.

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

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

Но легко сказать: просмотреть. А если таблица включает десять тысяч записей? А если миллион? Сервер, конечно, ее просмотрит, но вот сколько времени у него на это уйдет? Немало. А ответ надо получить как можно быстрей.

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

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

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

Получается, что для каждой таблицы порой следует иметь несколько разных индексов. В MySQL можно иметь до 32 индексов на таблицу. Максимальная индексная длина (то есть длина каждой записи в индексе) составляет до 500 байт. Индекс может включать в себя данные из нескольких столбцов сразу (в текущей реализации MySQL максимальное количество столбцов в каждом индексе составляет 15).

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

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

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

Столбцы необязательно создаются вместе с таблицами. Таблицу можно менять по мере надобности, добавляя или удаляя столбцы, меняя их типы. В инструкциях SQL вы можете обращаться к таблицам из различных баз данных с помощью синтаксиса Имя_базы_данных.Имя_таблицы . Это длинное имя позволяет однозначно указать таблицу и называется полным именем таблицы .

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

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

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

При обращении к столбцу в активной таблице можно вместо его полного имени (с указанием базы данных и таблицы) указывать только имя столбца. Оно автоматически будет дополнено именем активной таблицы текущей базы данных, что существенно ускоряет процесс ввода. Также, если вы обращаетесь к столбцу из другой таблицы в текущей базе данных, то можно указать его имя как Имя_таблицы.Имя_столбца , опустив часть Имя_базы_данных. оно будет приравнено к текущей базе данных.

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

Символы подстановки или групповые символы представляют собой такие символы, которым может соответствовать некое количество других символов. Например, при работе в Windows вы, скорее всего, сталкивались с символом звездочки (*), который обозначает любую цепочку произвольных символов. Такой метод широко применяется при работе с группами файлов. Вот это и есть групповой символ.

Регулярные выражения представляют собой некие последовательности символов, часть или все из которых являются символами подстановки. Например, при работе в Windows вы, скорее всего, сталкивались с обозначениями вида *.doc (соответствует всем файлам с расширением doc в текущем каталоге) или *.* (определяет все файлы в каталоге). Это и есть регулярные выражения, только в Windows их называют иначе. Как видите, ничего сложного в них нет. В MySQL вы не раз встретитесь с такими выражениями (правда, куца более сложными). Именно с их помощью задаются критерии для поиска информации.

Теперь давайте задумаемся о такой сложной проблеме: сервер допускает одновременную работу множества пользователей с одной и той же базой данных (даже с одной и той же таблицей). Но как обеспечить при этом целостность данных? Если один пользователь пишет одни данные, а другой в это же время пытается изменить именно эти данные, они разнесут всю базу данных. Как избежать этого?

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

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

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

Разница между транзакцией и атомной модификацией, если отбросить всю научную теорию, для конечного пользователя заключается в том, что в случае транзакционной модели пользователь может после выполнения запроса, который изменяет какие-то данные в таблице, решить, как именно он хочет завершить транзакцию: следует ли сохранить изменения (commit) или Отказаться от них (вызвать обратную перемотку, rollback ), вернув тем самым таблицу к тому состоянию, которое она имела до вызова запроса. Следует отметить, что существует режим автоматического сохранения всех изменений (AUTO_COMMIT). В атомной модели изменения отменены быть не могут: они вносятся в таблицу немедленно. Выполняемая в настоящий момент транзакция именуется активной.

MySQL по умолчанию использует свой формат таблиц: MyISAM. Раньше применялся тоже собственный формат ISAM, но теперь он объявлен устаревшим и поддерживается исключительно для совместимости со старыми пользователями. Если у вас есть таблицы в этом формате, мы очень рекомендуем конвертировать их в новый формат MyISAM. Он работает надежнее и быстрее.

Раз уж речь зашла о поддерживаемых форматах таблиц, следует сразу внести ясность на предмет того, что MySQL поддерживает несколько разных форматов. Одни работают на основе транзакций, другие на атомных модификациях, чтобы у конечного пользователя всегда был выбор, чем пользоваться. Надо отметить, что транзакционная модель намного сложнее в реализации, чем атомная, а поэтому поддержка транзакций в MySQL появилась существенно позднее. Свои форматы MySQL (MyISAM и ISAM) используют именно атомные модификации, но реализуют их настолько хорошо, что по надежности они ничем не уступают транзакционной модели доступа. В таблице 1.1. приведены поддерживаемые MySQL типы таблиц с их краткими описаниями.

Таблица 1.1. Краткие описания поддерживаемых MySQL типов таблиц.

Обратите внимание, что не все версии сервера поддерживают все перечисленные таблицы! Типы ISAM и MyISAM поддерживаются всегда, а вот насчет остальных возможны варианты. Так что посмотрите на сайте http://www.mysql.com , что именно вам нужно.

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

Зачем это нужно? Дампы очень удобны для резервного копирования, а также для переноса данных между разными серверами. Может возникнуть необходимость применения дампа и в рамках одного сервера.

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

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

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

Основными понятиями, с которыми следует ознакомиться на данном этапе, являются:

  • база данных - контейнер для всей коллекции данных MySQL;
  • таблица - вложенный в базу данных контейнер, в котором хранятся сами данные;
  • строка - отдельная запись, в которой могут содержаться несколько полей;
  • столбец - имя поля внутри строки.

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

Доступ к MySQL из командной строки

Работать с MySQL можно тремя основными способами: используя командную строку, используя веб-интерфейс наподобие phpMyAdmin и используя такой язык программирования, как PHP. Третий из перечисленных способов будет рассмотрен в последующих статьях, а сейчас давайте рассмотрим первые два способа.

Если у вас в соответствии с инструкциями, изложенными в статье , установлен WAMP-сервер OpenServer, то доступ к исполняемой программе MySQL можно получить из следующего каталога:

курса MySQL с нуля .

Вместо MySQL-5.7-x64 нужно подставить версию, указанную в настройках OpenServer во вкладке "Модули".

Нужно открыть программу "Командная строка" и перейти в этот каталог. Делается это при помощи команды cd ПУТЬ_К_НУЖНОЙ_ПАПКЕ:

Код доступен только после покупки курса MySQL с нуля .

После этого нужно запустить программу mysql.exe в этом каталоге, передав её специальный параметр. Для этого в командной строке теперь нужно выполнить команду:

Код доступен только после покупки курса MySQL с нуля .

В результате запустится MySQL-клиент. Он подключён к MySQL-серверу, который был запущен при старте OpenServer-a.

Если это не приведет к желаемому результату и будет выдано сообщение об ошибке подключения к серверу MySQL «Can"t connect to MySQL server on "localhost"», убедитесь, что OpenServer запущен и в модулях указан MySQL.

Параметр -u расшифровывается как user. То есть это флажок для указания пользователя, под которым нужно подключиться к серверу. root - это самый главный пользователь в MySQL. Он создаётся при установке сервера и по умолчанию у него нет пароля.

Но вернёмся к нашему терминалу. Через этот консольный клиент мы можем отправлять различные команды серверу. Давайте выполним команду, которая выводит все базы данных, созданные на этом сервере.

Код доступен только после покупки курса MySQL с нуля .

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

Работа с MySQL через phpMyAdmin

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

Тут нас встретит вот такое красивое окошечко для входа в систему.

Также как и в случае с консольным приложением указываем пользователя root и оставляем пустым пароль. Жмём "войти".

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

А сейчас давайте нажмём на вкладку SQL и перейдём в окно, где можно напрямую писать запросы к СУБД MySQL, как это было бы в консоли:

В открывшемся окне введите всё тот же запрос:

Код доступен только после покупки курса MySQL с нуля .

Нажимаем кнопку "вперёд" и видим тот же результат, что и в случае с консольным приложением.

Основные понятия языка SQL

По словам Эндрю Тейлора (Andrew Taylor), разработавшего язык SQL, название этого языка не является сокращением от Structured Query Language (или от чего-то подобного), хотя многие считают, что так оно и есть. Язык SQL лежит в основе более строгого и более общего метода хранения данных по сравнению с предыдущим стандартом организации баз данных в стиле DBM, который основан на использовании плоских файлов.

Язык SQL определен стандартами ANSI (American National Standards Institute) и ECMA (European Computer Manufacturer"s Association); обе эти организации по стандартизации являются международно признанными. Но следует учитывать, что в общих рекомендациях стандартов SQL наблюдаются заметные различия, касающиеся программных продуктов коммерческих компаний, с одной стороны, и организаций, занимающихся разработкой баз данных с открытым исходным кодом, с другой. Например, за последние несколько лет наблюдалось стремительное развитие так называемых объектно-реляционных баз данных, а также программных продуктов SQL, специально предназначенных для рынка веб. Перечень баз данных, которые могут применяться в сочетании с системой PHP, чрезвычайно велик, поэтому при выборе наиболее подходящей базы данных необходимо руководствоваться определенными принципами.

Основной принцип состоит в том, что нужно прежде всего учитывать собственные потребности разработки или по крайней мере твердо знать, какой цели требуется достичь. Пытаясь ознакомиться с другими рекомендациями, вы встретите массу весьма убедительных сообщении с такими доводами, что буквально "нельзя обойтись" без некоторых развитых средств базы данных (таких как триггеры или хранимые процедуры) и любой программный продукт с поддержкой SQL, в котором отсутствуют эти средства, вряд ли заслуживает права называться продуктом SQL. Воспринимайте эти суждения с большой долей сомнения. Гораздо лучше самому составить список требуемых характеристик в порядке значимости, а затем заняться поиском программного продукта, который в наибольшей степени соответствует вашим требованиям.

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

По существу, база данных SQL имеет очень простую логическую структуру. Каждая конкретная инсталляция программного обеспечения SQL обычно может состоять из нескольких баз данных. Например, одна БД может применяться для хранения данных о заказчиках, а другая - содержать данные о товарах. (Возникает определенная сложность, связанная с тем, что сам сервер SQL и коллекции поддерживаемых этим сервером таблиц обычно принято обозначать общим термином база данных.) Каждая база данных содержит несколько таблиц, каждая таблица состоит из тщательно определенных столбцов, а каждая позиция в таблице может рассматриваться как внесенная в таблицу запись, или строка.

Любой сервер SQL поддерживает четыре так называемых оператора манипулирования данными, и в целом эти операторы лежат в основе подавляющего большинства операций, выполняемых с реляционной базой данных. Этими четырьмя основными операторами базы данных являются SELECT, INSERT, UPDATE и DELETE. Операторы SQL, называемые также командами - очень удобны и позволяют выполнять практически все необходимые действия в базе данных.

Важной особенностью указанных четырех операторов SQL является то, что они позволяют манипулировать только значениями, хранящимися в базе данных, но не воздействуют на структуру самой базы данных. Иными словами, команды на основе этих операторов могут использоваться, например, для ввода данных, а не для создания базы данных; с помощью таких команд можно удалить из базы данных любой фрагмент данных, но сама "оболочка" останется нетронутой, поэтому, в частности, нельзя присвоить другой базе данных, работающей под управлением того же сервера, имя существующей базы данных. Для того чтобы добавить или удалить столбцы, уничтожить целую базу данных, не оставив и следа, или создать новую базу данных, необходимо применить другие команды, такие как DROP, ALTER и CREATE.

Все эти операторы мы подробно рассмотрим в следующей статье, посвященной командам MySQL.



Рекомендуем почитать

Наверх