MySQLJuniorTechnical
Что такое MySQL и каковы его основные области применения?
MySQL — реляционная СУБД с открытым исходным кодом. Применяется для веб-приложений, e-commerce, аналитики и встроенных систем; поддерживает SQL, транзакции InnoDB, репликацию и полнотекстовый поиск.
Что такое MySQL
MySQL — реляционная система управления базами данных (РСУБД) с открытым исходным кодом, разработанная компанией MySQL AB (сейчас принадлежит Oracle). Первый релиз вышел в 1995 году. Использует диалект языка SQL и архитектуру клиент-сервер. Является одной из самых распространённых СУБД в мире — входит в классический стек LAMP (Linux, Apache, MySQL, PHP/Python/Perl).
Ключевые характеристики
- Движки хранилища: подключаемые.
InnoDB— основной, поддерживает транзакции, внешние ключи, MVCC.MyISAM— устаревший, без транзакций, но быстрый для чтения.MEMORY— таблицы в RAM. - Транзакции: полная поддержка ACID в InnoDB.
- Репликация: master-replica (binlog-based) и групповая репликация (Group Replication / InnoDB Cluster).
- Полнотекстовый поиск: индексы
FULLTEXTв InnoDB и MyISAM. - JSON: нативный тип данных и функции (
JSON_EXTRACT,->>) с MySQL 5.7. - Оконные функции:
ROW_NUMBER(),RANK(),LAG()и др. с MySQL 8.0.
Основные области применения
- Веб-приложения: WordPress, Drupal, Joomla работают на MySQL по умолчанию.
- E-commerce: каталоги товаров, заказы, пользователи (Magento, WooCommerce).
- SaaS-платформы: хранение пользовательских данных, биллинг, события.
- Аналитические отчёты: небольшие и средние датасеты (для больших объёмов предпочтительнее ClickHouse или MySQL HeatWave).
- Встроенные системы: MySQL Embedded или SQLite-альтернативы для IoT.
Быстрый старт
-- Создание базы данных и таблицы
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE shop;
CREATE TABLE products (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- Вставка данных
INSERT INTO products (name, price, stock)
VALUES
('Laptop Pro 15', 1299.99, 50),
('Wireless Mouse', 29.99, 200);
-- Выборка
SELECT id, name, price
FROM products
WHERE price < 100
ORDER BY price DESC
LIMIT 10;
Запуск через Docker
docker run -d \
--name mysql-dev \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=shop \
-p 3306:3306 \
mysql:8.4
# Подключение
mysql -h 127.0.0.1 -u root -psecret shop
MySQL vs MariaDB vs PostgreSQL
- MariaDB: форк MySQL, совместимый на уровне протокола, добавляет Aria-движок и некоторые расширения SQL.
- PostgreSQL: более строгое следование стандарту SQL, богатые типы данных (JSONB, массивы, диапазоны), лучшая поддержка сложных запросов.
- MySQL: проще в настройке, быстрее на простых OLTP-нагрузках, огромная экосистема хостинга.
Подводные камни
- Кодировка
utf8в MySQL — не настоящий UTF-8 (максимум 3 байта). Для эмодзи и ряда символов необходимutf8mb4. - Тип
DATETIMEне хранит временную зону;TIMESTAMPхранит в UTC и конвертирует поtime_zoneсессии — путаница неизбежна при смене зоны. - Движок MyISAM не поддерживает транзакции и внешние ключи — не используйте его для новых таблиц.
- AUTO_INCREMENT при откате транзакции не возвращается назад — в id будут «дыры».
GROUP BYс выключеннымONLY_FULL_GROUP_BYвозвращает недетерминированные данные — в MySQL 5.7+ режим включён по умолчанию.- Неявное преобразование типов при сравнении строки с числом может привести к полному скану таблицы вместо использования индекса.
- Лимит размера строки InnoDB — 65535 байт; попытка создать таблицу с несколькими
TEXT/BLOBможет завершиться ошибкой.
Common mistakes
- Не уточнять storage engine и говорить о mysql как реляционная субд так, будто MyISAM и InnoDB ведут себя одинаково.
- Игнорировать implicit commit, autocommit, isolation level или binlog там, где они меняют ответ.
- Описывать PostgreSQL-поведение как MySQL-поведение.
- Забывать проверить план через EXPLAIN и фактическую версию MySQL.
What the interviewer is testing
- Кандидат объясняет mysql как реляционная субд через реальный механизм MySQL, а не общими словами.
- Приводит корректный SQL или диагностический запрос для этой СУБД.
- Называет ограничения, версионные отличия или эксплуатационные последствия.
- Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.