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 или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Sources

Related topics