phpMyAdmin — SQL, DDL и DML
После установки и первого входа phpMyAdmin становится вашим визуальным клиентом к MySQL/MariaDB. Всё, что можно сделать в консоли mysql или в коде через PDO, здесь доступно через вкладки, формы и редактор SQL.
Ключевая привычка на старте — различать DDL (структура) и DML (данные). Это те же категории команд, что в разделе SQL и в статье DDL, DML, DCL, TCL:
| Категория | Расшифровка | Что меняет | Примеры |
|---|---|---|---|
| DDL | Data Definition Language | Схему — базы, таблицы, индексы | CREATE, ALTER, DROP |
| DML | Data Manipulation Language | Строки внутри таблиц | INSERT, UPDATE, DELETE, SELECT |
| DCL | Data Control Language | Права пользователей | GRANT, REVOKE |
| TCL | Transaction Control Language | Границы транзакций | COMMIT, ROLLBACK |
phpMyAdmin не добавляет новый язык — он отправляет обычный SQL на сервер от имени вошедшего пользователя MySQL. Видимые базы и разрешённые операции определяются привилегиями, выданными через GRANT (см. статью 2).
Где выполнять SQL
В интерфейсе есть несколько точек входа в редактор. Они отличаются контекстом — тем, какая база или таблица уже выбрана, и нужно ли писать USE dbname вручную.
| Место | Область действия | Как открыть |
|---|---|---|
| Вкладка SQL на главной | Любые запросы к серверу | Верхнее меню после входа |
| Вкладка SQL у базы | Запросы в контексте БД (можно не писать USE) | Выбрать базу слева → SQL |
| Вкладка SQL у таблицы | Запросы к таблице; удобно для SELECT с фильтром | Таблица → SQL |
| Консоль | Быстрые запросы без смены страницы | Кнопка внизу или клавиша k |
Что умеет редактор
В поле ввода можно:
- выполнить один или несколько запросов подряд (batch; теория bulk/chunk — Пакетная работа с данными);
- сохранить текст в закладку (нужен pmadb);
- просмотреть историю текущего сеанса (и долговременную — при настроенном pmadb);
- подсветить синтаксис и получить подсказки по именам таблиц и столбцов в контексте выбранной базы.
Результат SELECT показывается таблицей с постраничной навигацией. После хранимых процедур или пакетного выполнения возможны несколько result set — phpMyAdmin выведет их последовательно.
В настройках консоли можно включить выполнение по Enter (вместо Ctrl+Enter). Многострочный запрос — Shift+Enter. Консоль удобна для быстрой проверки SELECT COUNT(*) или просмотра плана без ухода со страницы "Обзор".
Пример — проверка соединения
SELECT VERSION();
SHOW DATABASES;
Разбор построчно:
SELECT VERSION();— служебный запрос DML-класса (чтение). Возвращает версию сервера MySQL/MariaDB; полезно убедиться, что вы подключены к ожидаемому инстансу (сравните с MySQL — практическая работа).SHOW DATABASES;— метакоманда: список баз, к которым у текущего пользователя есть доступ. Не показывает чужие базы, если нет привилегииSHOW DATABASESили права на конкретную схему.
Оба запроса можно выполнить одним нажатием "Вперёд" — phpMyAdmin разделит их по ; и выполнит по порядку.
Управление базами данных
На уровне сервера вы работаете с каталогом схем (в MySQL база данных ≈ схема). Создание и удаление базы — операции DDL; просмотр списка таблиц и прав — смесь метаданных и DCL.
Создание базы
Через интерфейс
- Вкладка Базы данных (главная) или Создать базу данных.
- Имя, кодировка (utf8mb4 / utf8mb4_unicode_ci для новых проектов — полный Unicode, включая эмодзи; подробнее в MySQL — типы и синтаксис).
- Подтвердить создание.
Через SQL (DDL)
CREATE DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Разбор:
CREATE DATABASE shop— создаёт пустую схемуshopбез таблиц.CHARACTER SET utf8mb4— кодировка по умолчанию для текстовых столбцов в этой базе.COLLATE utf8mb4_unicode_ci— правила сравнения строк (сортировка,ORDER BY, уникальные индексы)._ci— case-insensitive, без учёта регистра.
Тот же DDL в консоли mysql или в миграции Laravel даст тот же результат — phpMyAdmin лишь отправляет текст на сервер.
Операции с существующей базой
| Действие | Интерфейс | SQL (примеры) |
|---|---|---|
| Просмотр списка таблиц | Структура базы | SHOW TABLES; |
| Переименование | Операции с БД | RENAME через создание копии / спец. инструменты |
| Удаление | Удалить базу | DROP DATABASE shop; |
| Права | Привилегии | GRANT, REVOKE |
| Обслуживание | Операции | CHECK, OPTIMIZE, REPAIR (зависит от движка) |
Удаление базы безвозвратно уничтожает все таблицы внутри — перед DROP делайте экспорт. На продакшене DROP DATABASE обычно запрещён для прикладных учёток; полные права есть только у администратора.
Таблицы — DDL
Таблица — основной объект реляционной модели: именованный набор столбцов с типами и ограничениями. Создание и изменение таблицы меняет метаданные в словаре данных сервера (см. Словарь данных и каталоги).
Создание таблицы
Мастер (визуально)
- База → Создать таблицу.
- Имя, число столбцов.
- Для каждого столбца задайте:
- имя — латиница, без пробелов; в коде PHP то же имя в запросах;
- тип —
INT,VARCHAR,TEXT,DATETIMEи др. (шпаргалка — MySQL — типы); - длину — для
VARCHAR(255)и подобных; - NULL / NOT NULL — допускает ли столбец отсутствие значения;
- значение по умолчанию — например
CURRENT_TIMESTAMP; - индексы и первичный ключ (PRIMARY KEY).
- Движок таблицы:
- InnoDB — по умолчанию; транзакции, внешние ключи, блокировки на уровне строк;
- MyISAM — устаревающий выбор без FK на уровне СУБД; иногда встречается в старых дампах.
Вкладка "Структура" → SQL или общая вкладка SQL:
CREATE TABLE users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_users_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Разбор фрагмента:
| Фрагмент | Назначение |
|---|---|
INT UNSIGNED NOT NULL AUTO_INCREMENT | Целочисленный идентификатор без знака; сервер сам увеличивает значение при INSERT без id |
VARCHAR(255) NOT NULL | Строка переменной длины до 255 символов; пустая строка допустима, NULL — нет |
DEFAULT CURRENT_TIMESTAMP | При вставке без created_at подставится текущее время сервера |
PRIMARY KEY (id) | Главный ключ строки; по нему строятся кластерный индекс InnoDB |
UNIQUE KEY uk_users_email (email) | Второй email в таблицу не попадёт — ограничение уникальности |
ENGINE=InnoDB | Движок с транзакциями и поддержкой внешних ключей |
DEFAULT CHARSET=utf8mb4 | Кодировка таблицы; согласована с CREATE DATABASE выше |
Полученный DDL можно скопировать в миграцию фреймворка или в репозиторий — это тот же текст, что показывает вкладка Структура → "Создание таблицы".
Изменение структуры (DDL)
Эволюция схемы в живом проекте почти всегда идёт через ALTER TABLE. В phpMyAdmin каждое действие в форме "Структура" генерирует соответствующий SQL — удобно учиться, сравнивая кнопку и текст запроса.
| Задача | Интерфейс | SQL |
|---|---|---|
| Добавить столбец | Структура → Добавить | ALTER TABLE ... ADD COLUMN ... |
| Изменить тип | Изменить | ALTER TABLE ... MODIFY COLUMN ... |
| Удалить столбец | Удалить | ALTER TABLE ... DROP COLUMN ... |
| Индексы | Индексы | ADD INDEX, DROP INDEX |
| Внешние ключи (InnoDB) | Связи | ADD CONSTRAINT ... FOREIGN KEY ... |
| Переименовать таблицу | Операции | RENAME TABLE old TO new; |
| Удалить таблицу | Удалить | DROP TABLE users; |
Просмотр актуального CREATE TABLE — вкладка Структура → подраздел "Создание таблицы" (показать DDL). Это снимок текущей схемы; для сравнения версий на команде используют миграции или mysqldump --no-data.
Сложные изменения (составные индексы, частичные индексы в других СУБД) — в Сложные индексы; для MySQL чаще хватает вкладки Индексы.
Представления, процедуры, триггеры
На уровне базы доступны вкладки Процедуры, События, Триггеры (при поддержке сервера и правах). Операции:
- создать и изменить объект через форму или SQL;
- вызвать процедуру с параметрами;
- экспортировать определение в дамп;
- удалить объект (
DROP).
Это тот же DDL/DML, что в хранимых процедурах и триггерах, только с подсветкой синтаксиса в браузере. phpMyAdmin не компилирует процедуры сам — валидирует и передаёт на сервер.
Данные в таблицах — DML
Когда схема готова, работа сдвигается к строкам — чтение, вставка, обновление, удаление. В терминологии SQL это DML; чтение (SELECT) иногда выделяют в отдельную категорию DQL — см. категории команд.
Просмотр
Вкладка Обзор (Browse) — постраничный вывод строк:
- сортировка по клику на заголовок столбца;
- фильтр и поиск по таблице — горячие клавиши
t(структура) иf(поиск); - экспорт видимой выборки в CSV/SQL.
За кулисами phpMyAdmin строит SELECT * FROM table LIMIT ... OFFSET ... с учётом сортировки и фильтра. Для сложных условий переходите на вкладку SQL или QBE.
Вставка
| Способ | Когда использовать |
|---|---|
| Вставить (Insert) | Одна строка, форма по столбцам; удобно вручную проверить ограничения |
| SQL | Массовая вставка, копирование из скрипта, импорт из другой среды |
INSERT INTO users (email) VALUES ('user@example.com');
Разбор:
INSERT INTO users— целевая таблица.(email)— список столбцов; остальные берут значения по умолчанию (created_atзаполнитсяCURRENT_TIMESTAMP,id— автоинкрементом).VALUES ('user@example.com')— одна новая строка. Несколько строк:VALUES (...), (...), (...).
Массовую загрузку из файла удобнее делать через импорт; для тысяч строк из приложения — подготовленные запросы в PDO.
Изменение
Два равноправных пути:
- Изменить (Edit) на строке в обзоре — правка полей в форме; phpMyAdmin сгенерирует
UPDATEсWHEREпо первичному ключу. - Явный
UPDATEво вкладке SQL — нужен для массовых правок и воспроизводимых скриптов:
UPDATE users SET email = 'new@example.com' WHERE id = 1;
Разбор:
SET email = '...'— новое значение столбца.WHERE id = 1— обязательный фильтр при точечном изменении.UPDATEбезWHEREзатронет все строки таблицы.
В InnoDB такой UPDATE можно обернуть в транзакцию (START TRANSACTION … COMMIT) и откатить при ошибке — см. Транзакции.
Удаление
- Галочки строк → Удалить в обзоре — эквивалент
DELETEсWHERE id IN (...). - Явный SQL:
DELETE FROM users WHERE id = 1;
DELETE убирает строки, структура таблицы остаётся. Для полной очистки без удаления определения таблицы:
TRUNCATE TABLE users;
TRUNCATE сбрасывает таблицу быстро и часто сбрасывает AUTO_INCREMENT; в MySQL это DDL-подобная операция с неявным коммитом. DELETE без WHERE удалит все строки, но в транзакции InnoDB его можно откатить через ROLLBACK. На проде перед массовым удалением — резервная копия.
Сводка DDL и DML в phpMyAdmin
| Категория | Команды / действия | Где в UI |
|---|---|---|
| DDL | CREATE/ALTER/DROP DATABASE, TABLE, INDEX, VIEW | Базы данных, Структура, SQL |
| DML | SELECT, INSERT, UPDATE, DELETE | Обзор, Вставить, SQL |
| DCL | GRANT, REVOKE | Учётные записи, привилегии |
| TCL | START TRANSACTION, COMMIT, ROLLBACK | SQL (InnoDB) |
Практическая шпаргалка типовых сценариев на SQL — Шпаргалка с типичными задачами по SQL; сравнение синтаксиса четырёх СУБД — Шпаргалка SQL — четыре СУБД на одной схеме.
Query-by-example (QBE)
QBE — визуальный конструктор SELECT. Вы выбираете таблицы, поля и условия в сетке; phpMyAdmin собирает текст запроса.
Что полезно знать:
- вкладка QBE доступна на уровне базы;
- для соединения таблиц phpMyAdmin может автоматически подставить JOIN по настроенным связям (InnoDB FK или метаданные pmadb для MyISAM);
- готовый запрос можно сразу выполнить или скопировать в редактор SQL для доработки (
GROUP BY, подзапросы — Подзапросы, JOIN).
QBE хорош для обучения: видно, как условие в ячейке превращается в фрагмент WHERE.
Designer и целостность
Designer — графическая схема таблиц и связей на холсте. Координаты расположения блоков хранятся в pmadb (pma__table_coords), поэтому без configuration storage диаграмма не сохранится между сессиями.
Возможности:
- перетаскивание таблиц, линии связей между ключами;
- экспорт в PDF — документация структуры для команды или ТЗ;
- для MyISAM — проверка ссылочной целостности по метаданным phpMyAdmin (СУБД FK не enforced);
- для InnoDB — ограничения
FOREIGN KEYпроверяются сервером приINSERT/UPDATE/DELETE.
Designer дополняет, но не заменяет нормальное проектирование схемы: реляционная модель, нормализация.
Связь с PHP-кодом
Объекты, которые вы создаёте в phpMyAdmin (база shop, таблица users, пользователь app_user), — те же имена, что в строке подключения приложения:
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=shop;charset=utf8mb4';
$pdo = new PDO($dsn, 'app_user', 'secret', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
Соответствие полей:
| phpMyAdmin | PHP (PDO) |
|---|---|
Имя базы shop | dbname=shop в DSN |
| Пользователь MySQL | второй аргумент new PDO |
utf8mb4 в DDL | charset=utf8mb4 в DSN |
Таблица users, столбец email | INSERT INTO users (email) VALUES (?) с привязкой параметров |
Подробнее — PDO и форма → БД. phpMyAdmin удобен для прототипирования схемы и отладки данных на локальном стеке (XAMPP, Open Server); в проде миграции чаще ведут через фреймворк (Laravel, Symfony), а не только ручной DDL в UI.
Типичный рабочий цикл:
- Набросать таблицы в phpMyAdmin или выполнить
CREATE TABLEв SQL. - Экспортировать структуру (статья 4) в файл
.sqlдля репозитория. - Подключить приложение через PDO и перенести DML в подготовленные запросы.
- На проде — миграции и CI, phpMyAdmin только для экстренной диагностики (при жёстком ограничении доступа).
Следующий шаг
Импорт, экспорт, pmadb и FAQ — дампы, лимиты файлов, настройка configuration storage, типичные ошибки входа и загрузки.