MySQL / MariaDB
Общие понятия:
СУБД (Система управления базами данных): Программное обеспечение для создания, хранения, управления и доступа к данным.
MySQL: Популярная реляционная СУБД с открытым исходным кодом.
MariaDB: Форк MySQL, созданный после приобретения MySQL компанией Oracle. Предоставляет аналогичную функциональность и часто используется в качестве замены.
Реляционная база данных: Данные организованы в таблицы, связанные между собой через отношения (связи).
SQL (Structured Query Language): Язык запросов для работы с реляционными базами данных.
Основные компоненты:
База данных (Database): Контейнер для хранения таблиц, представлений, процедур и других объектов.
Таблица (Table): Структурированный набор данных, состоящий из строк и столбцов.
Строка (Row): Запись данных (также называют записью или кортежем).
Столбец (Column): Атрибут данных, представляющий собой определенный тип данных.
Схема (Schema): Описание структуры базы данных (таблицы, столбцы, типы данных, связи).
Индекс (Index): Структура данных, которая ускоряет поиск данных в таблице.
Типы данных:
Целочисленные (Integer): INT, BIGINT, SMALLINT, TINYINT (разные диапазоны).
Вещественные (Floating-point): FLOAT, DOUBLE, DECIMAL (для точных денежных вычислений).
Строковые (String): VARCHAR (переменная длина), CHAR (фиксированная длина), TEXT, LONGTEXT (для больших объемов текста).
Дата и время (Date/Time): DATE, TIME, DATETIME, TIMESTAMP.
Boolean: BOOLEAN (хранит TRUE или FALSE, внутренне представляется как TINYINT(1)).
ENUM: Тип данных, который позволяет выбрать значение из предопределенного списка.
BLOB (Binary Large Object): Для хранения больших двоичных данных (изображения, файлы).
Операторы SQL (CRUD - Create, Read, Update, Delete):
CREATE (Создание): CREATE DATABASE имя_базы; - создание базы данных. CREATE TABLE имя_таблицы (столбец1 тип_данных, столбец2 тип_данных, ...); - создание таблицы. READ (Чтение): SELECT столбцы FROM имя_таблицы WHERE условие; - выборка данных.
выбрать все столбцы.
WHERE - фильтрация данных (условие может включать операторы сравнения, логические операторы, LIKE, IN, BETWEEN).
ORDER BY столбец [ASC | DESC]; - сортировка результатов.
LIMIT количество [OFFSET смещение]; - ограничение количества возвращаемых строк.
JOIN (INNER, LEFT, RIGHT, FULL OUTER) - объединение данных из нескольких таблиц на основе связей.
GROUP BY столбец; - группировка строк.
HAVING условие; - фильтрация групп после GROUP BY.
DISTINCT - убирает дубликаты.
UPDATE (Обновление):
UPDATE имя_таблицы SET столбец1 = значение1, столбец2 = значение2 WHERE условие; - обновление данных.
DELETE (Удаление):
DELETE FROM имя_таблицы WHERE условие; - удаление данных.
INSERT (Вставка):
INSERT INTO имя_таблицы (столбец1, столбец2, ...) VALUES (значение1, значение2, ...); - вставка данных.
Отношения между таблицами (Связи):
Один-к-одному (One-to-One): Одна запись в одной таблице связана с одной записью в другой таблице.
Один-ко-многим (One-to-Many): Одна запись в одной таблице может быть связана с несколькими записями в другой таблице.
Многие-ко-многим (Many-to-Many): Несколько записей в одной таблице могут быть связаны с несколькими записями в другой таблице (реализуется через промежуточную таблицу).
Ключи (Keys):
Первичный ключ (Primary Key): Уникальный идентификатор каждой строки в таблице. Не может содержать NULL.
Внешний ключ (Foreign Key): Столбец в одной таблице, который ссылается на первичный ключ в другой таблице. Обеспечивает целостность данных.
Уникальный ключ (Unique Key): Гарантирует уникальность значений в столбце, но может содержать NULL.
Транзакции:
Транзакция: Последовательность операций с базой данных, которая либо выполняется полностью (commit), либо откатывается (rollback) в случае ошибки. Обеспечивает ACID-свойства (Atomicity, Consistency, Isolation, Durability).
START TRANSACTION; / BEGIN;: Начало транзакции.
COMMIT;: Фиксация изменений (сохранение транзакции).
ROLLBACK;: Откат изменений (отмена транзакции).
Индексы (Ускорение поиска):
Индекс: Структура данных, которая ускоряет поиск данных в таблице. Создается на основе одного или нескольких столбцов. Типы индексов:
PRIMARY KEY: Автоматически создает уникальный индекс.
UNIQUE: Уникальный индекс.
INDEX / INDEX: Обычный индекс (B-tree).
FULLTEXT: Для полнотекстового поиска.
CREATE INDEX имя_индекса ON имя_таблицы (столбец1, столбец2, ...); - создание индекса. Важно: Индексы увеличивают скорость чтения, но замедляют операции записи (вставка, обновление, удаление).
Нормализация баз данных:
Оптимизация запросов:
Использование индексов: Для ускорения поиска.
Правильное использование WHERE: Для фильтрации данных.
Избегайте SELECT *: Выбирайте только необходимые столбцы.
Оптимизация JOIN: Используйте индексы на столбцах, используемых в JOIN.
Анализ запросов (EXPLAIN): Используйте EXPLAIN для анализа плана выполнения запроса и выявления узких мест.
Кеширование запросов: Используйте кеширование (например, Redis) для результатов часто выполняемых запросов.
Пользователи и привилегии:
Создание пользователей: CREATE USER 'имя_пользователя'@'хост' IDENTIFIED BY 'пароль';
Предоставление привилегий: GRANT привилегии ON база_данных.таблица TO 'имя_пользователя'@'хост';
ALL PRIVILEGES - все привилегии.
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, …
Отзыв привилегий: REVOKE привилегии ON база_данных.таблица FROM 'имя_пользователя'@'хост';
Хранение данных и движки таблиц (Storage Engines):
InnoDB: Движок по умолчанию, поддерживает транзакции, внешние ключи, ACID-свойства.
MyISAM: Более старый движок, не поддерживает транзакции, не рекомендуется для новых проектов (но может быть в legacy).
MEMORY: Хранит данные в памяти (для временных таблиц).
ENGINE=имя_движка; - указание движка при создании таблицы.
Резервное копирование и восстановление (Backups and Recovery):
Важно: Регулярно создавайте резервные копии базы данных.
mysqldump: Утилита для создания логических резервных копий (SQL-скриптов).
Физическое копирование файлов данных: Быстрый способ резервного копирования (но требует остановки/заморозки базы данных).