Основы MySQL
Что такое MySQL?
MySQL — это система управления реляционными базами данных (СУБД) с открытым исходным кодом. MySQL является одной из самых популярных СУБД в мире и широко используется в веб-приложениях.
Основные характеристики MySQL
- Реляционная модель данных: данные хранятся в таблицах, которые могут быть связаны между собой.
- Открытый исходный код: доступен для бесплатного использования и модификации.
- Кроссплатформенность: работает на различных операционных системах.
- Высокая производительность: оптимизирован для быстрого выполнения запросов.
- Масштабируемость: может обрабатывать большие объемы данных.
- Безопасность: включает механизмы для защиты данных.
Основные команды MySQL
Подключение к серверу MySQL
mysql -u username -pСоздание базы данных
CREATE DATABASE database_name;Выбор базы данных
USE database_name;Создание таблицы
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);Пример:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Вставка данных
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);Пример:
INSERT INTO users (username, email, password) VALUES ('john_doe', 'john@example.com', 'hashed_password');Выборка данных
SELECT column1, column2, ... FROM table_name WHERE condition;Пример:
SELECT id, username, email FROM users WHERE id > 10;Обновление данных
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;Пример:
UPDATE users SET email = 'new_email@example.com' WHERE id = 5;Удаление данных
DELETE FROM table_name WHERE condition;Пример:
DELETE FROM users WHERE id = 3;Удаление таблицы
DROP TABLE table_name;Удаление базы данных
DROP DATABASE database_name;Типы данных в MySQL
Числовые типы
- INT: целое число от -2,147,483,648 до 2,147,483,647.
- TINYINT: целое число от -128 до 127.
- SMALLINT: целое число от -32,768 до 32,767.
- MEDIUMINT: целое число от -8,388,608 до 8,388,607.
- BIGINT: целое число от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.
- FLOAT: число с плавающей точкой одинарной точности.
- DOUBLE: число с плавающей точкой двойной точности.
- DECIMAL: число с фиксированной точностью.
Строковые типы
- CHAR: строка фиксированной длины (от 0 до 255 символов).
- VARCHAR: строка переменной длины (от 0 до 65,535 символов).
- TEXT: строка переменной длины (до 65,535 символов).
- MEDIUMTEXT: строка переменной длины (до 16,777,215 символов).
- LONGTEXT: строка переменной длины (до 4,294,967,295 символов).
Типы даты и времени
- DATE: дата в формате 'YYYY-MM-DD'.
- TIME: время в формате 'HH:MM:SS'.
- DATETIME: дата и время в формате 'YYYY-MM-DD HH:MM:SS'.
- TIMESTAMP: временная метка, автоматически обновляется при изменении записи.
- YEAR: год в формате YYYY.
Другие типы
- ENUM: перечисление, может иметь одно из предопределенных значений.
- SET: набор, может иметь ноль или более предопределенных значений.
- BLOB: бинарные данные.
- JSON: данные в формате JSON (доступно с MySQL 5.7.8).
Как понимать производительность запросов
EXPLAIN и EXPLAIN ANALYZE
Когда запрос “вроде правильный”, но работает медленно, первое действие — посмотреть план выполнения.
EXPLAIN SELECT * FROM users WHERE email = 'a@b.com';На что смотреть в EXPLAIN:
type: чем ближе кconst/ref/range, тем лучше;ALLозначает полный скан таблицы.key: какой индекс реально выбран оптимизатором (может отличаться от ожидаемого).rows: оценка количества строк, которые придется просмотреть.Extra: подсказки вродеUsing index,Using where,Using temporary,Using filesort.
В MySQL 8+ удобно использовать EXPLAIN ANALYZE, чтобы увидеть фактическое время и количество строк на шагах плана (а не только оценку).
Базовые правила индексов
Индекс ускоряет чтение, но замедляет запись и занимает место. Поэтому индексы добавляют под реальные запросы.
Практические правила:
- индексируйте поля, которые часто участвуют в
WHERE,JOIN,ORDER BY; - составной индекс обычно эффективнее “нескольких одиночных”, если запрос фильтрует по набору полей;
- порядок полей в составном индексе важен: сначала более селективные условия и те, по которым фильтруете чаще;
- не индексируйте “всё подряд”: лучше 2–5 нужных индексов, чем десятки бесполезных.
Транзакции и блокировки (очень кратко)
Если у вас конкурентные изменения данных, важно понимать:
- транзакции (
START TRANSACTION,COMMIT,ROLLBACK); - уровни изоляции;
- блокировки строк и дедлоки.
Эти темы сильно влияют на корректность и производительность под нагрузкой.
Заключение
Это базовое введение в MySQL. Для более глубокого изучения рекомендуется обратиться к официальной документации MySQL и практиковаться в написании запросов и работе с базами данных.