Перейти к основному содержимому

phpMyAdmin — SQL, DDL и DML

Разработчику

После установки и первого входа phpMyAdmin становится вашим визуальным клиентом к MySQL/MariaDB. Всё, что можно сделать в консоли mysql или в коде через PDO, здесь доступно через вкладки, формы и редактор SQL.

Ключевая привычка на старте — различать DDL (структура) и DML (данные). Это те же категории команд, что в разделе SQL и в статье DDL, DML, DCL, TCL:

КатегорияРасшифровкаЧто меняетПримеры
DDLData Definition LanguageСхему — базы, таблицы, индексыCREATE, ALTER, DROP
DMLData Manipulation LanguageСтроки внутри таблицINSERT, UPDATE, DELETE, SELECT
DCLData Control LanguageПрава пользователейGRANT, REVOKE
TCLTransaction 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.

Создание базы

Через интерфейс

  1. Вкладка Базы данных (главная) или Создать базу данных.
  2. Имя, кодировка (utf8mb4 / utf8mb4_unicode_ci для новых проектов — полный Unicode, включая эмодзи; подробнее в MySQL — типы и синтаксис).
  3. Подтвердить создание.

Через 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

Таблица — основной объект реляционной модели: именованный набор столбцов с типами и ограничениями. Создание и изменение таблицы меняет метаданные в словаре данных сервера (см. Словарь данных и каталоги).

Создание таблицы

Мастер (визуально)

  1. База → Создать таблицу.
  2. Имя, число столбцов.
  3. Для каждого столбца задайте:
    • имя — латиница, без пробелов; в коде PHP то же имя в запросах;
    • типINT, VARCHAR, TEXT, DATETIME и др. (шпаргалка — MySQL — типы);
    • длину — для VARCHAR(255) и подобных;
    • NULL / NOT NULL — допускает ли столбец отсутствие значения;
    • значение по умолчанию — например CURRENT_TIMESTAMP;
    • индексы и первичный ключ (PRIMARY KEY).
  4. Движок таблицы:
    • 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 TRANSACTIONCOMMIT) и откатить при ошибке — см. Транзакции.

Удаление

  • Галочки строк → Удалить в обзоре — эквивалент DELETE с WHERE id IN (...).
  • Явный SQL:
DELETE FROM users WHERE id = 1;

DELETE убирает строки, структура таблицы остаётся. Для полной очистки без удаления определения таблицы:

TRUNCATE TABLE users;
TRUNCATE и DELETE

TRUNCATE сбрасывает таблицу быстро и часто сбрасывает AUTO_INCREMENT; в MySQL это DDL-подобная операция с неявным коммитом. DELETE без WHERE удалит все строки, но в транзакции InnoDB его можно откатить через ROLLBACK. На проде перед массовым удалением — резервная копия.


Сводка DDL и DML в phpMyAdmin

КатегорияКоманды / действияГде в UI
DDLCREATE/ALTER/DROP DATABASE, TABLE, INDEX, VIEWБазы данных, Структура, SQL
DMLSELECT, INSERT, UPDATE, DELETEОбзор, Вставить, SQL
DCLGRANT, REVOKEУчётные записи, привилегии
TCLSTART TRANSACTION, COMMIT, ROLLBACKSQL (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,
]);

Соответствие полей:

phpMyAdminPHP (PDO)
Имя базы shopdbname=shop в DSN
Пользователь MySQLвторой аргумент new PDO
utf8mb4 в DDLcharset=utf8mb4 в DSN
Таблица users, столбец emailINSERT INTO users (email) VALUES (?) с привязкой параметров

Подробнее — PDO и форма → БД. phpMyAdmin удобен для прототипирования схемы и отладки данных на локальном стеке (XAMPP, Open Server); в проде миграции чаще ведут через фреймворк (Laravel, Symfony), а не только ручной DDL в UI.

Типичный рабочий цикл:

  1. Набросать таблицы в phpMyAdmin или выполнить CREATE TABLE в SQL.
  2. Экспортировать структуру (статья 4) в файл .sql для репозитория.
  3. Подключить приложение через PDO и перенести DML в подготовленные запросы.
  4. На проде — миграции и CI, phpMyAdmin только для экстренной диагностики (при жёстком ограничении доступа).

Следующий шаг

Импорт, экспорт, pmadb и FAQ — дампы, лимиты файлов, настройка configuration storage, типичные ошибки входа и загрузки.