Шпаргалка по MySQL
Удобный для поиска и печати справочник по MySQL — запросы, соединения, индексы, функции, типы данных и команды администрирования. Бесплатно.
Запросы
10SELECT * FROM users;
Выбрать все столбцы и строки
SELECT id, name FROM users;
Выбрать определённые столбцы
SELECT DISTINCT city FROM users;
Только уникальные значения
WHERE age > 18 AND active = 1
Фильтровать строки по условиям
WHERE name LIKE 'A%'
Сопоставление по шаблону (% = любые символы)
WHERE id IN (1, 2, 3)
Совпадение с любым значением из набора
WHERE age BETWEEN 18 AND 30
Фильтр по включающему диапазону
ORDER BY created_at DESC
Сортировка по убыванию
LIMIT 10 OFFSET 20
Постраничный вывод результатов
WHERE email IS NULL
Совпадение с null-значениями
Соединения
8INNER JOIN orders ON orders.user_id = users.id
Строки, совпадающие в обеих таблицах
LEFT JOIN orders ON ...
Все левые строки + совпадения
RIGHT JOIN orders ON ...
Все правые строки + совпадения
CROSS JOIN colors
Декартово произведение
SELF JOIN: FROM emp e JOIN emp m ON e.mgr = m.id
Соединить таблицу саму с собой
USING (user_id)
Соединить по столбцу с тем же именем
UNION / UNION ALL
Объединить наборы результатов
SELECT u.*, o.total FROM users u JOIN orders o
Псевдонимы таблиц для ясности
Агрегация
9COUNT(*)
Подсчитать строки
SUM(amount)
Сумма числового столбца
AVG(price)
Среднее значение
MIN(price), MAX(price)
Наименьшее и наибольшее
GROUP BY country
Сгруппировать строки для агрегации
HAVING COUNT(*) > 5
Фильтр по агрегированным группам
GROUP_CONCAT(name)
Конкатенировать сгруппированные значения
COUNT(DISTINCT city)
Подсчитать уникальные значения
ROW_NUMBER() OVER (ORDER BY id)
Ранжирование оконной функцией
Изменение данных
8INSERT INTO users (name) VALUES ('Sam');
Вставить одну строку
INSERT INTO users (name) VALUES ('A'),('B');
Вставить несколько строк
UPDATE users SET active = 1 WHERE id = 5;
Обновить подходящие строки
DELETE FROM users WHERE id = 5;
Удалить подходящие строки
TRUNCATE TABLE logs;
Быстро удалить все строки
INSERT ... ON DUPLICATE KEY UPDATE
Upsert по уникальному ключу
REPLACE INTO users ...
Удалить + вставить при конфликте
INSERT IGNORE INTO ...
Пропустить строки, вызвавшие бы ошибку
Схема / DDL
9CREATE TABLE users (id INT PRIMARY KEY);
Создать новую таблицу
AUTO_INCREMENT
Столбец с автонумерацией
ALTER TABLE users ADD COLUMN age INT;
Добавить столбец
ALTER TABLE users DROP COLUMN age;
Удалить столбец
ALTER TABLE users MODIFY name VARCHAR(100);
Изменить тип столбца
DROP TABLE IF EXISTS users;
Удалить таблицу
FOREIGN KEY (user_id) REFERENCES users(id)
Ссылка на другую таблицу
ON DELETE CASCADE
Каскадное удаление дочерних записей
CREATE TABLE t2 LIKE t1;
Скопировать структуру таблицы
Индексы и ключи
8PRIMARY KEY (id)
Уникальный идентификатор строки
UNIQUE (email)
Обеспечить уникальность значений
CREATE INDEX idx_name ON users (name);
Ускорить поиск по столбцу
CREATE INDEX idx_ab ON t (a, b);
Составной (многостолбцовый) индекс
DROP INDEX idx_name ON users;
Удалить индекс
FULLTEXT (body)
Индекс полнотекстового поиска
EXPLAIN SELECT ...;
Показать план запроса
SHOW INDEX FROM users;
Список индексов таблицы
Типы данных
9INT, BIGINT, TINYINT
Целочисленные типы по размеру
DECIMAL(10, 2)
Точные числа с фиксированной точкой
VARCHAR(255)
Строка переменной длины
TEXT, LONGTEXT
Большие текстовые блобы
DATE, DATETIME, TIMESTAMP
Типы даты и времени
BOOLEAN (TINYINT(1))
true/false, хранится как 0/1
JSON
Нативный столбец JSON-документа
ENUM('a', 'b')
Одно из фиксированного набора значений
UNSIGNED
Неотрицательный числовой модификатор
Type sizes & limits
20TINYINT
1 byte: -128..127 (0..255 UNSIGNED)
SMALLINT
2 bytes: -32,768..32,767 (0..65,535)
MEDIUMINT
3 bytes: -8.39M..8.39M (0..16.78M)
INT
4 bytes: -2.15B..2.15B (0..4.29B)
BIGINT
8 bytes: ±9.22×10^18 (0..1.84×10^19)
DECIMAL(M, D)
Exact: M up to 65 digits, D up to 30
FLOAT / DOUBLE
4 / 8 bytes approximate floating point
CHAR(M)
Fixed length, 0..255 characters
VARCHAR(M)
0..65,535 bytes (shared 64KB row limit)
TINYTEXT
Up to 255 bytes (~255 chars)
TEXT
Up to 65,535 bytes (64 KB)
MEDIUMTEXT
Up to 16,777,215 bytes (16 MB)
LONGTEXT
Up to 4,294,967,295 bytes (4 GB)
BLOB types
TINY/—/MEDIUM/LONG: 255B..4GB (binary)
JSON
Stored as LONGBLOB, up to ~4 GB
ENUM / SET
ENUM: 65,535 members; SET: 64 members
DATE
1000-01-01 to 9999-12-31 (3 bytes)
DATETIME
1000 to 9999, microseconds (5–8 bytes)
TIMESTAMP
1970-01-01 to 2038-01-19 UTC (4 bytes)
TIME / YEAR
±838:59:59 / 1901..2155
Функции
9NOW(), CURDATE()
Текущие дата-время / дата
DATE_FORMAT(d, '%Y-%m-%d')
Форматировать дату
DATEDIFF(a, b)
Дней между двумя датами
CONCAT(a, ' ', b)
Соединить строки
COALESCE(a, b, 'n/a')
Первое значение не null
IFNULL(x, 0)
Заменить null значением по умолчанию
CASE WHEN x > 0 THEN '+' ELSE '-' END
Условное выражение
CAST(x AS CHAR)
Преобразовать тип значения
ROUND(x, 2)
Округлить до знаков после запятой
Транзакции и администрирование
9START TRANSACTION;
Начать транзакцию
COMMIT;
Зафиксировать транзакцию
ROLLBACK;
Отменить транзакцию
SAVEPOINT sp1;
Задать точку отката
SHOW TABLES;
Список таблиц в базе данных
DESCRIBE users;
Показать структуру таблицы
SHOW PROCESSLIST;
Список активных подключений
GRANT ALL ON db.* TO 'u'@'%';
Выдать привилегии пользователю
mysqldump -u root db > db.sql
Резервная копия базы данных (CLI)
Нет записей, соответствующих «:q».
Нужна помощь?
Возникла проблема с этим инструментом? Сообщите нам.