Работа с базами данных SQL в PHP для новичков
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
- Урок №
новая вкладка с new.code.mu
часть 1 - Урок №
новая вкладка с new.code.mu
часть 2 - Урок №
новая вкладка с new.code.mu
часть 3 - Урок №
новая вкладка с new.code.mu
часть 4 - Урок №
новая вкладка с new.code.mu
часть 5 - Урок №
новая вкладка ютуб
пагинация
Практика
- Урок №
Практика
PHP для новичков - Урок №
Минипроект:
гостевая книга
Движок PHP
- Урок №
новая вкладка с new.code.mu
реализация движка php
новая вкладка ютуб
реализация движка php —>
Продвинутые БД
- Урок №
Продвинутые
SQL запросы - Урок №
Правильная организация
баз данных
Аутентификация
- Урок №
новая вкладка с new.code.mu
Введение - Урок №
новая вкладка с new.code.mu
Авторизация - Урок №
новая вкладка с new.code.mu
Сессии - Урок №
новая вкладка с new.code.mu
Регистрация - Урок №
новая вкладка с new.code.mu
Валидация - Урок №
новая вкладка с new.code.mu
Хеширование - Урок №
новая вкладка с new.code.mu
Профиль - Урок №
новая вкладка с new.code.mu
Права
Практика
ООП и MVC
Абстрактные классы и интерфейсы
- Урок №
новая вкладка с new.code.mu
Абстрактные классы - Урок №
новая вкладка с new.code.mu
Введение в интерфейсы - Урок №
новая вкладка с new.code.mu
Применение интерфейсов - Урок №
новая вкладка с new.code.mu
Параметры методов в интерфейсе - Урок №
новая вкладка с new.code.mu
Объявление конструктора в интерфейсе - Урок №
новая вкладка с new.code.mu
Наследование интерфейсов друг от друга - Урок №
новая вкладка с new.code.mu
Интерфейсы и instanceof - Урок №
новая вкладка с new.code.mu
Реализация нескольких интерфейсов - Урок №
новая вкладка с new.code.mu
Наследование от класса и реализация интерфейса - Урок №
новая вкладка с new.code.mu
Константы в интерфейсах
Новый урок в данном разделе
Трейты
- Урок №
новая вкладка с new.code.mu
Введение в трейты - Урок №
новая вкладка с new.code.mu
Несколько трейтов - Урок №
новая вкладка с new.code.mu
Конфликты методов - Урок №
новая вкладка с new.code.mu
Модификаторы доступа - Урок №
новая вкладка с new.code.mu
Приоритет методов - Урок №
новая вкладка с new.code.mu
. текст, код Статические свойства - Урок №
новая вкладка с new.code.mu
. текст, код Статические методы - Урок №
новая вкладка с new.code.mu
Абстрактные методы - Урок №
новая вкладка с new.code.mu
Трейты в трейтах
ООП Магия
- Урок №
новая вкладка с new.code.mu
Магия - Урок №
новая вкладка с new.code.mu
__toString - Урок №
новая вкладка с new.code.mu
__get
новая вкладка с new.code.mu
. текст, задачи __set - Урок №
новая вкладка с new.code.mu
. текст, код __isset - Урок №
новая вкладка с new.code.mu
. текст, код __unset - Урок №
новая вкладка с new.code.mu
. текст, код __sleep и __wakeUp
- Урок №
новая вкладка с new.code.mu
. текст, код Пространства имен - Урок №
новая вкладка с new.code.mu
. текст, код Автозагрузка классов
Практика
- Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс Arr - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс Ticket - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс TicketCollection - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс Date - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс Interval - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс File
Практика: классы как набор методов
- Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс ArrayConvertor - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс TagHelper - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс FormHelper - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс TableHelper - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс SessionShell - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс CookieShell - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс FileManipulator - Урок №
новая вкладка с new.code.mu
. текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор
Что такое база данных
База данных (сокращенно БД) — это место, в котором хранятся данные сайта.
Это могут быть тексты страниц, списки пользователей с их логинами и паролями, каталоги продукции и другое.
База данных состоит из таблиц. Что такое таблица вы знаете из жизни: это строки и столбцы. А на пересечении строк и столбцов располагаются ячейки.
В базах данных столбцы часто называют полями.
Это легко можно вообразить себе, представив документ Excel. Базой данных будет являться сам документ (книга), а таблицами — каждый лист этой книги.
PhpMyAdmin
Для редактирования баз данных часто пользуются программой PhpMyAdmin.
PhpMyAdmin (читается PHPмайадмин, часто пишут аббревиатуру PMA или ПМА) — это оболочка для работы с базами данных прямо у вас в браузере.
Вы можете править содержимое таблиц, создавать новые базы данных и таблицы — и все это через веб-интерфейс, не зная SQL.
Видео на PhpMyAdmin
Задачи на PhpMyAdmin
Давайте откроем PhpMyAdmin и приступим к изучению его интерфейса.
Чтобы вам было проще с ним освоится, сделайте следующие практические задачи:
- Создайте базу данных test.
- В ней создайте таблицу users.
- В этой таблице сделайте 4 поля (столбца):
- id (для него нужно поставить галочку AUTO_INCREMENT или A.I.), тип integer,
- name, тип varchar, 32 символа,
- age, тип integer,
- birthday (англ. день рождения), тип date.
- Найдите вкладку ‘вставить’ и с ее помощью вставьте несколько строк в эту таблицу При этом поле id заполнять не нужно! Оно заполнится автоматически!
- Поредактируйте какую-нибудь запись.
- Удалите какую-нибудь запись.
- Поменяйте кодировку для таблицы и для всей базы данных (на utf8_general_ci).
- Переименуйте таблицу.
- Переименуйте базу данных.
AUTO_INCREMENT
Обратите внимание на то, что мы создали поле id и поставили ему галочку AUTO_INCREMENT. Это очень важный шаг!
Теперь при вставке новой записи (строки) в таблицу это поле будет заполняться автоматически уникальным номером.
При этом если мы удалим строку с каким-то id (например 1), то такого id больше никогда не будет.
Зачем нужно поле id?
Затем, чтобы мы всегда могли обратиться к конкретной строке по ее id, например с целью удаления или редактирования.
Типы переменных
В SQL довольно много типов переменных, но чаще всего приходится пользоваться следующими:
- integer – целочисленный.
- text – большое текстовое поле.
- varchar – не очень большое текстовое поле, при этом мы должны задать его размер (он должен быть степенью двойки: 8, 16, 32, 64, 128, 256 и т.д.).
- date — поле для хранения даты (дата хранится в SQL-формате: год-месяц-день, пример: 2013-06-24).
Как работать с mySQL через PHP
Работа с БД из PHP осуществляется всего лишь с помощью трех функций:
- mysqli_connect – соединение с сервером и базой данных.
- mysqli_query — универсальная функция отправки запросов к БД, с помощью нее можно сделать все.
- mysqli_error — вывод ошибок.
Далее подробнее про каждую из функций.
Устанавливаем соединение с БД
Данный материал есть также в виде видео: https://youtu.be/J8GFuyA_k_8
Прежде, чем начать работать с базой данных из PHP, нужно установить соединение с сервером, на котором эта база находится.
Делается это с помощью функции PHP mysql_connect, которая принимает 3 параметра: имя хоста (сервера), имя пользователя, под которым мы работаем с базой и пароль для этого пользователя.
Если вы работаете на своем компьютере то это будут ‘localhost’, ‘root’ и пароль в виде пустой строки (на некоторых серверах он тоже может быть root). Если ваша база данных в интернете — то эти данные дает вам хостер.
Давайте установим соединение с базой данных:
Посылаем запросы к базе данных
Запросы к базе данных представляют собой обычные строки, которые мы вставляем в функцию PHP mysqli_query (первым параметром это функция принимает переменную, в которую мы записали результат mysqli_connect, в нашем случае это переменная $link):
Принято правило, по которому команды SQL следует писать в верхнем регистре (то есть большими буквами), а все остальное — в нижнем.
Это относиться к командам SELECT, UPDATE, FROM, DELETE, WHERE и другим такого рода.
Конечно, синтаксической ошибки не будет, если вы напишите их маленькими буквами, но принято большими.
Отлавливаем ошибки базы данных
Многие начинающие зачастую не умеют отлавливать ошибки, которые вернула база данных.
Поэтому при работе с БД у них постоянно возникают сложности. Что-то не работает, а что — не понятно, так как ошибок они не видят, так как PHP не выводит ошибки mySQL, если ему об этом не сказать
Чтобы вывести ошибки, следует пользоваться конструкцией or die ( mysqli_error($link) ), которую необходимо добавлять к каждому запросу к БД.
Смотрите пример: mysqli_query($link, $query) or die( mysqli_error($link) );
Таким образом вы сразу будете получать сообщения об ошибках синтаксиса SQL. Обратите внимание на то, что на рабочем сайте эти конструкции следует удалять, чтобы пользователи и тем более хакеры не видели ошибок БД.
Проблемы с кодировками
Зачастую у новичков возникает проблема с кодировками — казалось бы нормальный русский текст в базу данных записывается абракадаброй или вопросиками.
Чтобы не было проблем с кодировками следует придерживаться простых правил:
- Базу данных следует создавать в кодировке utf8_general_ci.
- Документ PHP должен быть в кодировке utf8.
- Таблицы в БД должны быть в utf8_general_ci.
- На всякий случай сразу после команды mysqli_connect добавьте такое запрос: mysqli_query($link, «SET NAMES ‘utf8′»);
Начнем практиковаться
Сейчас мы с вами начнем изучить SQL запросы на практике. Для этого нам понадобится тестовая таблица в базе данных, заполненная некоторыми данными. Сейчас мы с вами ее сделаем и заполним.
Итак, создайте свою первую базу данных с помощью PhpMyAdmin.
Назовите ее «test».
Создайте в этой базе новую таблицу.
Назовите ее «workers» (англ. работники).
В ней создайте 4 столбца (столбцы по другому называются поля):
- id – тип integer, не забудьте поставить ему галочку AUTO_INCREMENT (чтобы в этом столбце номера проставлялись автоматически).
- name (англ. имя) – тип varchar, размером в 256 знаков.
- age (англ. возраст) — тип integer.
- salary (англ. зарплата) — тип integer.
Ее заполните тестовыми данными, как показано в таблице ниже (этот шаг обязателен, так как дальше все задачи будут по этой таблице):
| id | name | age | salary |
|---|---|---|---|
| 1 | Дима | 23 | 400 |
| 2 | Петя | 25 | 500 |
| 3 | Вася | 23 | 500 |
| 4 | Коля | 30 | 1000 |
| 5 | Иван | 27 | 500 |
| 6 | Кирилл | 28 | 1000 |
Итак, у нас есть таблица с работниками фирмы, в которой указаны их имена, возрасты и зарплаты (в $). Далее мы будем работать с этой таблицей.
Тестируем работоспособность
Прежде чем начать работу, следует протестировать работоспособность — попробуем сделать какой-нибудь запрос к нашей базе.
Просто скопируйте этот код и запустите его у себя:
Если var_dump($result) вернет resource, то все работает, если же null – то возникли какие-то проблемы. в новых версиях PHP в $result будет лежать объект с данными (всегда будет непустой). Если обработать его через mysqli_fetch_assoc будет или результат или null (про mysqli_fetch_assoc см ниже или видео https://youtu.be/J8GFuyA_k_8 , которое уже было выше в пункте «Устанавливаем соединение»)
В таком случае проверьте все еще раз, уберите последовательно все ошибки PHP, если таковые есть.
Как достать результат
После того, как мы сделали запрос к базе, в переменной $result будет лежать результат этого действия.
Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база.
Достать результат в нормальном виде (в массиве) можно с помощью следующего кода:
Как работает последняя строка?
Функция mysqli_fetch_assoc считывает последовательно каждую строку результата, который прислала нам база.
В цикле for мы считываем построчно результат из базы.
Когда цикл дойдет до последней строки — mysqli_fetch_assoc вернет false и цикл for закончит свою работу.
Как выполнить SQL-запрос в phpMyAdmin?
Поскольку очень часто в наших разработках требуется выполнять SQL-запросы, мы решили разместить статью для ознакомления, как это делается, дабы каждый раз не затрагивать данную тему в отдельных статьях.
1. У вашего хостинг-провайдера узнайте адрес входа в phpMyAdmin. При переходе по нему чаще всего вы попадаете на форму входа (в отдельный случаях вход осуществляется автоматически).

Введите ваши данные и нажмите кнопку «Вперед».
2. Авторизовавшись, вы попадаете непосредственно в панель управлением базой данных. Если база данных у вас одна – переходите во вкладку «SQL».

Если же баз данных несколько – выберите нужную вам из левого меню, после чего также выберете вкладку «SQL».
3. Перед вами появится форма для ввода SQL-запроса:

куда вы, собственно, вводите ваш SQL-запрос, после чего нажимаете кнопку «Вперед».
Язык запросов SQL
База данных — централизованное хранилище данных, обеспечивающее хранение, доступ, первичную обработку и поиск информации.
Базы данных разделяются на:
- Иерархические
- Сетевые
- Реляционные
- Объектно-ориентированные
SQL (Structured Query Language) — представляет из себя структурированный язык запросов (перевод с английского). Язык ориентирован на работу с реляционными (табличными) базами данных. Язык прост и, по сути, состоит из команд (интерпретируемый), посредством которых можно работать с большими массивами данных (базами данных), удаляя, добавляя, изменяя информацию в них и осуществляя удобный поиск.
Для работы с SQL кодом необходима система управления базами данных (СУБД), которая предоставляет функционал для работы с базами данных.
Система управления базами данных (СУБД) — совокупность языковых и программных средств, предназначенных для создания, ведения и совместного использования БД многими пользователями.
Обычно, для обучения используется СУБД Microsoft Access, но мы будем использовать более распространенную в веб сфере систему — MySQL. Для удобства будет использовать веб-интерфейс phpmyadmin или онлайн сервис для построения sql запросов sql fiddle, принцип работы с которыми описан ниже.
Каждый столбец должен иметь свой тип данных, т.е. должен быть предназначен для внесения данных определенного типа. Типы данных в MySQL описаны в одном из уроков данного курса.
Составляющие языка SQL
Язык SQL состоит из следующих составных частей:
- язык манипулирования данными (Data Manipulation Language, DML);
- язык определения данных (Data Definition Language, DDL);
- язык управления данными (Data Control Language, DCL).
1.
Язык манипулирования данными состоит из 4 главных команд:
- выборка данных из БД — SELECT
- вставка данных в таблицу БД — INSERT
- обновление (изменение) данных в таблицах БД — UPDATE
- удаление данных из БД — DELETE
2.
Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей — таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур.
Мы будем рассматривать лишь несколько из основных команд языка. Ими являются:
- создание базы данных — CREATE DATABASE
- создание таблицы — CREATE TABLE
- изменение таблицы (структуры) — ALTER TABLE
- удаление таблицы — DROP TABLE
3.
Как сделать sql запрос в phpmyadmin
- Запустить ярлык start denwer .
- В адресной строке браузера набрать http://localhost/tools/phpmyadmin .
- В левой части окна выбрать интересующую базу данных или создать ее (если еще не создана). Создание базы данных в phpmyadmin рассмотрено ниже.
- Если известна таблица, с которой будет работать запрос — в левой части окна выбрать эту таблицу.
- Выбрать вкладку SQL и начать вводить запрос.

Создание базы данных в phpmyadmin
Для начала необходимо выполнить первые два пункта из предыдущего задания.
Затем:
- в открывшемся веб-интерфейсе выбрать вкладку Базы данных;
- в поле Создать базу данных ввести название базы;
- щелкнуть по кнопке Создать;
- теперь для продолжения работы в phpMyAdmin в созданной базе данных можно перейти к уроку создания таблиц.

Работа в сервисе sql fiddle
Онлайн проверка sql запросов возможна при помощи сервиса sqlFiddle.
Самый простой способ организации работы состоит из следующих этапов:

-
В верхней части рабочей области сервиса выбираем язык: SQLite(WebSQL);


Еще пример:
Теперь некоторые пункты рассмотрим подробнее.
Создание таблиц:
* для тех, кто незнаком с синтаксисом — просто скопировать полностью код и вставить в левое окошко сервиса
* урок по созданию таблиц в языке SQL далее
/*teachers*/ CREATE TABLE `teachers` ( `id` int(11) NOT NULL, `name` varchar(25) NOT NULL, `code` int(11), `zarplata` int(11), `premia` int(11), PRIMARY KEY (`id`) ); insert into teachers values (1, ‘Иванов’,1,10000,500), (2, ‘Петров’,1,15000,1000) ,(3, ‘Сидоров’,1,14000,800), (4,’Боброва’,1,11000,800); /*lessons*/ CREATE TABLE `lessons` ( `id` int(11) NOT NULL, `tid` int(11), `course` varchar(25), `date` varchar(25), PRIMARY KEY (`id`) ); insert into lessons values (1,1, ‘php’,’2015-05-04′), (2,1, ‘xml’,’2016-13-12′); /*courses*/ CREATE TABLE `courses` ( `id` int(11) NOT NULL, `tid` int(11), `title` varchar(25), `length` int(11), PRIMARY KEY (`id`) ); insert into courses values (1,1, ‘php’,54), (2,1, ‘xml’,72), (3,2, ‘sql’,25);

В результате получим таблицы с данными:
Отправка запроса:
Для того чтобы протестировать работоспособность сервиса, добавьте в правое окошко код запроса.
SELECT * FROM `teachers` WHERE `name` = ‘Иванов’;
На дальнейших уроках SQL будет использоваться та же схема, поэтому необходимо будет просто копировать схему и вставлять в левое окно сервиса.
Онлайн визуализации схемы базы данных
Для онлайн визуализации схемы базы данных можно воспользоваться сервисом https://dbdesigner.net/:
- Создать свой аккаунт (войти в него, если уже есть).
- Щелкнуть по кнопке Go to Application.
- Меню Schema ->Import.
- Скопировать и вставить в появившееся окно код создания и заполнения таблиц базы данных
Изучение SQL, с помощью phpMyAdmin
Данная обучающая статья от ведущего разработчика phpMyAdmin предназначена для веб-мастеров, которые только начинают знакомиться с основами SQL. В качестве инструментария используются сервер баз данных MySQL и интерфейс их администрирования — phpMyAdmin. Последний и будет использоваться в данной статье в качестве инструмента для изучения SQL.
Что такое SQL?
SQL (англ. Structured Query Language — язык структурированных запросов) — универсальный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Этот язык был разработан IBM (экспериментальная СУБД «System R») в 1974-1979 годах. Первый стандарт языка SQL был принят Американским национальным институтом стандартизации (ANSI) в 1987 (так называемый SQL level 1) и несколько уточнён в 1989 году (SQL level 2), 1992 и 1999 году. После этого, индустрия начала широко использовать SQL как язык реляционных баз данных, и на сегодняшний день практически каждая база данных основана на SQL.
Архитектура данных, к которой обращается SQL называется реляционной. В реляционных базах данных все данные представлены в виде простых таблиц, разбитых на строки и столбцы, на пересечении которых расположены данные. Запросы к таким таблицам возвращают таблицы, которые сами могут становиться предметом дальнейших запросов. Каждая база данных может включать несколько таблиц, которые, как правило, связаны друг с другом, откуда и произошло название реляционные.
В данной статье мы будем использовать MySQL, популярную открытую реализацию SQL, которая предоставляется абсолютным большинством хостинг-провайдеров.
Инструментарий для данной статьи
Для выполнения упражнений, приведенных в данной статье, потребуется доступ к MySQL-серверу. В качестве интерфейса для MySQL используется phpMyAdmin — PHP приложение, запущенное на Web-сервере. Для полного ознакомления с возможностями phpMyAdmin рекомендуется прочитать книгу «Mastering phpMyAdmin for effective MySQL Management».
Эта статья познакомит Вас с основами синтаксиса SQL, время от времени, предлагая Вам ввести выражения; покажет, как phpMyAdmin генерирует MySQL-запросы на основе ваших действий через интерфейс.
Создание таблиц в phpMyAdmin
В качестве примера, мы будем использовать географическую информационную систему. Допустим, мы решили, что нам необходима информация о городах и странах — таким образом, нам понадобятся две таблицы, которые будут частью базы данных `geodb`. Для создания таблиц можно использовать вкладку «Structure» на странице просмотра базы данных, или использовать блок SQL-запросов для ввода соответствующего выражения.
Чтобы создать таблицу, воспользуемся выражением CREATE TABLE, в котором мы зададим имя нашей новой таблицы. Выражение начинается с CREATE TABLE, после которой следует имя таблицы. Затем в скобках указывается список столбцов, и информация о ключах. Каждому столбцу дается имя, указывается тип данных, указывается атрибут NULL или NOT NULL (здесь, NOT NULL означает, что колонка не может иметь значение NULL), и значение по умолчанию, если оно уместно.
CREATE TABLE cities ( id int(11) NOT NULL auto_increment, city_name varchar(50) NOT NULL default », latitude varchar(15) NOT NULL default », longitude varchar(15) NOT NULL default », population int(11) NOT NULL default ‘0’, country_code char(2) NOT NULL default », PRIMARY KEY (id) ) TYPE=MyISAM AUTO_INCREMENT=1 ;
Столбец id — это первичный ключ (primary key), колонка, которая уникально идентифицирует каждый город. Тип данных этого столбца — INT (целое число нормального размера), MySQL назначает уникальные значения для этого столбца, благодаря атрибуту auto_increment. Обратите внимание на то, что мы не можем использовать название городов в качестве первичного ключа, т.к. некоторые имена городов не уникальны в мире. Для отображения численности населения мы также используем целое число.
Другие столбцы используют в качестве типов данных строки фиксированной длины (CHAR) либо строки переменной длины (VARCHAR). Когда мы точно знаем длину строки, лучше использовать CHAR, задавая длину столбца как CHAR(2). В противном случае, мы используем в качестве типа данных строки переменной длины, указывая только максимальную длину строки, например: VARCHAR(15).
После списка столбцов, мы можем указать дополнительные параметры таблицы, например, её тип, первое значение для столбца автоинкремента. SQL-выражение заканчивается точкой с запятой. Создав таблицу для городов, мы делаем ту же операцию, но на этот раз для таблицы стран.
CREATE TABLE countries ( country_code char(2) NOT NULL default », country_name varchar(100) NOT NULL default » ) TYPE=MyISAM;
Заметьте, что столбец `country_code` присутствует в обеих таблицах. Это отражает принцип связи: country_code в `cities` связан с одноименным столбцом в таблице `countries`. Таким образом, мы экономим на месте, указывая название страны в базе данных только однажды.
В другой статье (Migrating to InnoDB) техника связывания рассматривается более подробно. После того как таблицы созданы, следует ввести в них какие-нибудь данные.
Изменение табличных данных с помощью phpMyAdmin.
В данном разделе мы изучим базовый синтаксис выражений INSERT, UPDATE, DELETE, и SELECT.
Добавление данных с помощью INSERT
Для начала изучим выражение INSERT, на примере кода, который генерирует phpMyAdmin при выполнении операции INSERT. Для этого открываем вкладку Insert на странице просмотра таблицы `countries`, и вводим данные о стране:
После того как мы кликаем на Go, данные записываются в таблицу и phpMyAdmin показывает нам использованное выражение INSERT:
INSERT INTO `countries` (`country_code` , `country_name` ) VALUES (‘ca’, ‘Canada’);
После части INSERT INTO, следует имя таблицы. В MySQL, мы можем заключать имена таблиц и имена столбцов в обратные галочки «`», если в именах используются спецсимволы, зарезервированные слова. Затем мы открываем первую скобку, перечисляем столбцы в которые будет осуществлена вставка, разделяя их друг от друга запятыми. После перечисления списка названий столбцов скобка закрывается и указывается зарезервированное слово VALUES, после которого в скобках перечисляются значения которые нужно вставить в таблицу, причем перечисляются в том же порядке, что и названия столбцов. Если значения имеют символьный тип данных, необходимо заключать их в кавычки.
Давайте занесем в таблицу `cities` данные города:
INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population`, `country_code` ) VALUES (», ‘Sherbrooke’, ’45 23 59.00′, ‘-71 46 11.00’, 125000, ‘ca’);
Здесь, мы указываем пустое значение для id, потому что атрибут автоинкремента данного столбца обеспечивает автоматическое выставление уникального значения. Также следует обратить внимание, что значение `population` — числовое, поэтому не заключено в кавычки.
Давайте закончим этот раздел вставкой некоторых данных для нескольких других стран и городов, которые понадобятся нам позже.
INSERT INTO `countries` ( `country_code` , `country_name` ) VALUES (‘zh’, ‘China’); INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population` , `country_code` ) VALUES (», ‘Shanghai’, ’31 13 58.00′, ‘121 26 59.99’, 11000000, ‘zh’);
Обновление данных с помощью UPDATE
Сначала кликните на `Browse` для таблицы `cities` в результате будет выведена пока единственная запись. Кликая по иконке в виде карандаша на бумаге (или ссылке Edit), мы переходим на панель редактирования данной строки. Изменим значение столбца `population` на 130000. После щелчка на `Save`, phpMyAdmin отображает следующее выражение:
UPDATE `cities` SET `population` = ‘130000’ WHERE `id` = ‘1’ LIMIT 1 ;
Ключевое слово в данном выражении — `UPDATE`, за которым следует название таблицы. Слово `SET` предваряет список модификаций (в нашем случае — только для столбца `population`) который записывается в формате «столбец = новое значение».
Мы видим, что в выражении присутствует условие: WHERE `id` = ‘1’, в котором используется первичный ключ, чтобы ограничить изменение значения столбца `population` только данной строкой, т.е. только для данного города.
Часть limit 1 добавляется phpMyAdmin-ом и является гарантией, что если первичный ключ не задан, изменения не будут применены более чем к одной записи. За один запрос `UPDATE` могут быть изменены значения сразу нескольких столбцов:
UPDATE `cities` SET `city_name` = ‘Sherbrooke, Quebec’, `population` = ‘130001’ WHERE `id` = ‘1’ LIMIT 1 ;
Удаление данных с помощью DELETE
В режиме `Browse` (просмотр) таблицы `cities`, кликните по красной иконке корзины (или ссылке Delete) — будет сгенерирован запрос, запрашивающий подтверждение выполнения следующего выражения: DELETE FROM `cities` WHERE `id` = ‘1’ LIMIT 1 ;
Синтаксис здесь очень прост, и включает только название таблицы, и условие при котором будет выполнена операция удаления. Исключение условия WHERE из запросов UPDATE или DELETE вполне допустимо в SQL, но в таком случае действие выражения будет применено к каждой записи таблицы!
Выборка данных с помощью SELECT
Извлечение информации из таблиц — вероятно наиболее часто используемый вид запроса. Например, запросы SELECT позволяют получить ответы на подобные вопросы: «какие города имеют численность населения большую, чем данное число?». Фактически, мы уже предварительно использовали SELECT, когда кликали на ссылку Browse для таблицы `cities`. Это сгенерировало простейшую форму выражения запроса SELECT:
SELECT * FROM `cities` LIMIT 0,30;
Звездочка здесь означает «все столбцы». Мы добавили FROM и имя таблицы, в которой будет выполнен запрос на выборку. LIMIT 0,30 означает что выборка начинается с записи номер 0 (самой первой), и содержит максимум 30 записей.
Вкладка Search позволяет увидеть большее количество опций для запроса SELECT. Выберем вкладку Search для таблицы cities, и выберем только те столбцы, которые нам нужны. Затем справа от списка столбцов мы выберем порядок сортировки полученной выборки по столбцу `population` по убыванию:
В результате phpMyAdmin сгенерирует следующий запрос:
SELECT `city_name` , `population`
FROM `cities`
WHERE 1
ORDER BY `population` DESC LIMIT 0,30;
Мы видим, что звездочка была заменена списком столбцов, разделенных запятыми. Условие WHERE 1, добавленное phpMyAdmin-ом, всегда истинно и выбирает все записи. Чуть позже мы увидим, что можно заменить его другим условием. Кроме того, появляется условие ORDER BY , после которого следует название столбца по которому мы хотим сортировать результат выборки, и ключевое слово DESC для сортировки по убыванию (мы могли также использовать ASC для сортировки по возрастанию).
Условия в SQL-запросах
Самым простым способом добавить условие — клик по SQL-query: Edit, на странице результатов, в результате которого будет открыто всплывающее окно «Query». Добавим условие для столбца `country`:
SELECT `city_name` , `population`
FROM `cities`
WHERE country_code = ‘zh’
ORDER BY `population` DESC;
Это условие выберет все города, находящиеся в Китае. При обозначении условий может быть использовано богатое множество операторов и функций. Вот — два примера:
Найти канадские города с численностью населения более 100000:
WHERE population > 100000 AND country_code = ‘ca’;
Найти города, чьи названия начинаются с символа «A»:
WHERE city_name like ‘A%’
Функции группировки
Итоговая информация может быть сгенерирована в результате группировки по определенному столбцу. Давайте узнаем среднюю численность городского населения в стране:
SELECT country_code, AVG(population)
FROM cities
GROUP BY country_code
Другие возможные функции группировки — MIN(), MAX(), SUM() и COUNT(), которые вычисляют соответственно минимальное значение, максимальное значение, сумму значений, и число записей. Например, с помощью следующего запроса мы можем получить число городов в стране:
SELECT country_code, count(city_name) FROM cities
GROUP BY country_code;
Объединения
Обычно, реляционная база данных включает множество таблиц, связанных общими ключами. Часто возникает необходимость в запросах сразу для нескольких таблиц. Связать, или объединить, таблицы можно с помощью различных методов; мы сосредоточимся на самом простом методе, заключающемся в сравнении ключей.
В рассмотренном ниже запросе, условие FROM содержит список названий таблиц, разделенных запятыми. В списке столбцов, мы используем названия таблиц и точку в качестве префикса перед каждым названием столбца (в этом нет необходимости в случае, если все столбцы из одной таблицы).
SELECT cities.city_name, cities.population, countries.country_name
FROM cities, countries
WHERE cities.country_code = countries.country_code LIMIT 0,30
Заключение
Те элементарные выражения, что были рассмотрены нами здесь не раскрывают полностью возможности SQL. Однако, эта статья поверхностно осветила основы SQL, и показала как использовать phpMyAdmin в качестве инструмента для углубления знаний в SQL.
Об авторе. Марк Делисл начал свое участие в развитии phpMyAdmin в декабре 1998 (именно он разработал первую многоязычную версию). С мая 2001, принимал активное участие в проекте как разработчик и проектный администратор.
Работает с 1980 в колледже Cegep de Sherbrook (Квебек, Канада), разработчиком программного обеспечения и системным администратором. Он также преподавал организацию сети, безопасность, серверы Linux, и прикладное программирование PHP/MySQL.
Издательство Packt Publishing выпустило первую книгу по phpMyAdmin: Mastering phpMyAdmin for effective MySQL Management, автором которой является Марк Делисл