В этом практическом руководстве мы рассмотрим основные команды SQL кратко и с примерами. SQL (MySQL, Oracle SQL, Microsoft SQL и другие) предоставляют сотни функций и команд, о которых написано много хороших книг и онлайн-ресурсов. Обновлено в 2026 году.
SQL (Structured Query Language) является стандартным языком управления базами данных. Здесь находится краткое руководство с наиболее важными SQL-командами, релевантными для веб-сайтов.
Мы предлагаем здесь быстрый обзор отдельных команд.
Это руководство по SQL будет регулярно расширяться:
Текущий обзор тем по SQL
Подробный обзор важнейших SQL-команд и тем для веб-сайтов:
SELECT
Запрос данных
WHERE, ORDER BY, GROUP BY, HAVING Функции вроде COUNT, SUM, AVG JOIN для объединения таблиц
SQL Tutorial для IRC-Coding.de
SELECT
Команда SELECT используется для запроса данных из таблицы базы данных.
SELECT spalte1, spalte2 FROM tabelle;
Вот краткое руководство по указанным командам и концепциям SQL.
WHERE
Фильтрует записи на основе условия.
SELECT * FROM Kunden WHERE Stadt = 'Bochum';
Предложение WHERE в SQL служит для ограничения набора результатов запроса на основе определённых условий. Вот несколько особенностей и лучших практик при использовании предложения WHERE:
Синтаксис и прописные буквы:
Ключевые слова SQL не чувствительны к регистру, но принято писать их прописными буквами, чтобы отличить их от названий таблиц и столбцов. Сравнение строк в большинстве SQL-баз данных чувствительно к регистру. Это означает, что ‘Bochum’ и ‘bochum’ рассматриваются как разные значения, если база данных не настроена на игнорирование регистра.
Кавычки:
Строковые значения в SQL обычно заключают в одиночные кавычки (’ ’). Если строка содержит одиночную кавычку, её нужно удвоить или использовать механизм экранирования, например ‘O”Brien’ для имени “O’Brien”.
Значения NULL:
Запрос “WHERE Stadt = ‘Bochum’” не вернёт строки, где значение столбца ‘Stadt’ равно NULL. Если нужно учитывать NULL-значения, это должно быть указано явно с использованием “IS NULL” или “IS NOT NULL”.
Оптимизация производительности:
Индексы могут существенно улучшить производительность запросов. Если столбец ‘Stadt’ часто используется в предложениях WHERE, индекс на этом столбце может увеличить скорость запроса. Использование функций на столбцах в предложении WHERE может привести к игнорированию индексов.
Например: “WHERE UPPER(Stadt) = ‘BOCHUM’” препятствует использованию индекса на столбце ‘Stadt’.
Несколько условий:
Несколько условий можно комбинировать с AND и OR. Порядок важен и должен быть ясно обозначен скобками в сложных запросах, например “WHERE Stadt = ‘Bochum’ AND (Alter > 30 OR Beruf = ‘Ingenieur’)”.
Поиск с подстановочными символами:
С помощью LIKE можно выполнять поиск по шаблону. Подчёркивание (_) представляет один символ, а процент (%) представляет любое количество символов, например “WHERE Stadt LIKE ‘Boc%’”.
Безопасность:
Избегайте SQL-injection-атак, используя параметризованные запросы, особенно при работе с пользовательским вводом. Это особенно важно для динамических SQL-запросов. Пример защищённого и оптимизированного запроса:
-- Пример защищённого запроса с параметризацией
SELECT *
FROM Kunden
WHERE Stadt = ?;
Здесь используется заполнитель (?), который позже подставляется безопасным способом (например, Prepared Statements) с фактическим значением.
ORDER BY
Сортирует результаты по одному или нескольким столбцам.
SELECT * FROM Produkte ORDER BY Preis DESC;
Можно использовать позицию столбцов в списке SELECT для сортировки:
SELECT Name, Alter FROM Kunden ORDER BY 2 DESC;
сортирует по второму столбцу (Alter) в убывающем порядке. Это снижает читаемость и часто не рекомендуется.
Значения NULL:
Значения NULL обрабатываются особым образом при сортировке. В некоторых SQL-базах данных они появляются первыми, в других в конце, в зависимости от того, сортируется ли в возрастающем или убывающем порядке.
Многие диалекты SQL предоставляют опции для явной сортировки NULL-значений, например ORDER BY Spalte ASC NULLS LAST.
Оптимизация производительности:
Сортировка может значительно повлиять на производительность, особенно при больших объёмах данных. Индексы на столбцах сортировки могут улучшить производительность. Избегайте использования функций на столбцах в предложении ORDER BY, так как это может привести к игнорированию индексов, например ORDER BY UPPER(Name).
Комбинирование ORDER BY с другими предложениями:
ORDER BY можно использовать вместе с LIMIT или FETCH FIRST для постраничной выдачи результатов:
SELECT * FROM Kunden ORDER BY Name LIMIT 10 OFFSET 20;
Важно помнить, что предложение ORDER BY обычно располагается в конце SQL-запроса, после WHERE, GROUP BY и HAVING.
Сортировка по вычисляемым столбцам:
Можно также сортировать по вычисляемым столбцам, определённым в списке SELECT:
SELECT Name, (Gehalt * 1.1) AS NeuesGehalt FROM Mitarbeiter ORDER BY NeuesGehalt DESC;
Коллация:
Порядок сортировки может зависеть от коллации, которая определяет способ сортировки текстовых значений. Различные коллации могут давать разный порядок для строк.
Сортировка в сочетании с JOINs:
В запросах с использованием JOINs можно сортировать по столбцам из любой из задействованных таблиц:
SELECT k.Name, o.Bestelldatum
FROM Kunden k JOIN Bestellungen o
ON k.KundenID = o.KundenID ORDER BY o.Bestelldatum;
Пример запроса с ORDER BY:
SELECT Name, Stadt, Alter
FROM Kunden
ORDER BY Stadt ASC, Alter DESC;
Этот запрос сначала сортирует результаты по городу в возрастающем порядке, а внутри каждого города по возрасту в убывающем порядке.
GROUP BY
Группирует строки с общими значениями в столбце.
SELECT Kategorie, SUM(Verkaufspreis) FROM Bestellungen GROUP BY Kategorie;
HAVING
Фильтрует группы подобно WHERE, но для агрегированных значений.
SELECT Kategorie, SUM(Verkaufspreis) FROM Bestellungen
Предложение HAVING в SQL используется для установки условий на результаты группировки, создаваемые предложением GROUP BY. Вот несколько особенностей и лучших практик при использовании предложения HAVING:
Различие между WHERE и HAVING:
Предложение WHERE фильтрует строки до группировки, а предложение HAVING фильтрует после группировки.
Примеры: WHERE используется для фильтрации строк на основе значений отдельных строк, прежде чем произойдёт агрегирование. HAVING используется для фильтрации агрегированных значений.
Использование с агрегирующими функциями:
HAVING часто используется в сочетании с агрегирующими функциями такими как COUNT, SUM, AVG, MAX и MIN.
Пример:
SELECT Stadt, COUNT(*) AS Kundenanzahl
FROM Kunden
GROUP BY Stadt
HAVING COUNT(*) > 5;
Этот запрос подсчитывает количество клиентов в каждом городе и показывает только те города, где более 5 клиентов.
Синтаксис:
Предложение HAVING всегда следует за предложением GROUP BY и располагается после него в запросе. Правильный порядок предложений в запросе:
SELECT, FROM, [WHERE], GROUP BY, HAVING, [ORDER BY].
Несколько условий:
Можно использовать несколько условий в предложении HAVING, комбинируя AND и OR, подобно предложению WHERE.
Пример:
SELECT Stadt, AVG(Alter) AS Durchschnittsalter
FROM Kunden
GROUP BY Stadt
HAVING AVG(Alter) > 30 AND COUNT(*) > 10;
Этот запрос показывает только города, где средний возраст клиентов превышает 30 лет и количество клиентов больше 10.
Оптимизация производительности:
Как и с предложением WHERE, использование HAVING может влиять на производительность, особенно при больших объёмах данных. Эффективное использование индексов и избегание ненужных вычислений может улучшить производительность. Часто более эффективно размещать условия, основанные на отдельных строках, в предложении WHERE и только условия, основанные на агрегатах, в предложении HAVING.
Пример запроса с HAVING:
SELECT Stadt, COUNT(*) AS Kundenanzahl, AVG(Alter) AS Durchschnittsalter
FROM Kunden
WHERE Stadt IS NOT NULL
GROUP BY Stadt
HAVING COUNT(*) > 5 AND AVG(Alter) > 30;
В этом запросе отображаются города с более чем 5 клиентами и средним возрастом более 30 лет.
Кратко:
WHERE фильтрует до агрегирования. HAVING фильтрует после агрегирования. HAVING в основном используется в сочетании с агрегирующими функциями. Правильное размещение условий между WHERE и HAVING критично для эффективности запроса.
GROUP BY Kategorie
HAVING SUM(Verkaufspreis) > 1000;
Агрегирующие функции
COUNT: подсчитывает строки SUM: сумма значений AVG: среднее значение
“SELECT COUNT(*) AS AnzahlKunden FROM Kunden;
SELECT AVG(Preis) AS DurchschnittlichenPreis FROM Produkte; “
Агрегирующие функции - это специальные SQL-функции, которые выполняют вычисления над несколькими строками таблицы или набором отфильтрованных результатов. Они объединяют значения указанного столбца в один итоговый результат. Основные агрегирующие функции:
COUNT Подсчитывает количество строк в группе.
SELECT COUNT(*) AS AnzahlKunden FROM Kunden;
SUM Вычисляет сумму значений в указанном столбце.
SELECT SUM(Preis) AS GesамtUmsatz FROM Bestellungen;
AVG Вычисляет среднее значение в столбце.
SELECT AVG(Alter) AS DurchschnittsAlter FROM Nutzer;
MAX Возвращает максимальное значение в столбце.
SELECT MAX(Gehalt) AS HoechstesGehalt FROM Mitarbeiter;
MIN Возвращает минимальное значение в столбце.
SELECT MIN(Preis) AS BilligstenProdukt FROM Produkte;
Агрегирующие функции часто используются вместе с предложением GROUP BY для выполнения вычислений над группами строк, имеющих одинаковые значения в одном или нескольких столбцах. Они полезны для извлечения сводной информации из данных, например общих объёмов продаж, средних значений, максимальных и минимальных значений.
JOIN
Объединяет строки из двух таблиц на основе совпадающих значений.
“ SELECT Bestellungen.BestellNr, Kunden.Name, Produkte.Bezeichnung FROM Bestellungen
JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID
JOIN Produkte ON Bestellungen.ProduktID = Produkte.ProduktID; “
Это основные команды для фильтрации, группировки, агрегирования и объединения данных в SQL при работе с веб-приложениями.
INSERT, UPDATE, DELETE
Добавление, изменение и удаление записей
CREATE, ALTER, DROP
Руководство: INSERT, UPDATE и DELETE в SQL
SQL (Structured Query Language) - стандартный язык для администрирования баз данных. С помощью команд INSERT, UPDATE и DELETE ты можешь добавлять, изменять и удалять записи в базе данных.
Вот краткое руководство:
INSERT INTO - добавление новой записи
Команда INSERT INTO вставляет новую запись в таблицу базы данных. _ INSERT INTO TabellenName (Spalte1, Spalte2, …) VALUES (Wert1, Wert2, …); _
Пример INSERT INTO SQL:
INSERT INTO Kunden (Name, Adresse, Stadt) VALUES ('Max Mustermann', 'Musterstraße 1', 'Musterstadt');
UPDATE - изменение записи С помощью UPDATE ты можешь изменять одну или несколько записей на основе условия.
_ UPDATE TabellenName SET Spalte1 = Wert1, Spalte2 = Wert2, … WHERE Bedingung; _
Пример SQL Update:
UPDATE Kunden SET Stadt = 'Berlin' WHERE KundenID = 22;
DELETE FROM - удаление записи
Команда DELETE FROM удаляет одну или несколько записей из таблицы.
DELETE FROM TabellenName WHERE Bedingung;
Пример DELETE FROM: “
DELETE FROM Bestellungen WHERE BestellDatum < ‘2022-01-01’;
“ С помощью этих трёх SQL-команд ты получаешь полный контроль над записями в таблицах базы данных - для вставки, изменения и удаления данных на своём сайте.
Создание, модификация и удаление таблиц
**Типы данных, ограничения, индексы **
Вот руководство SQL по созданию, модификации и удалению таблиц, а также по типам данных, ограничениям и индексам:
CREATE TABLE - создание таблицы
CREATE TABLE TabellenName ( Spalte1 Datentyp Constraint, Spalte2 Datentyp, Spalte3 Datentyp, ... CONSTRAINT Constraint_Name Constraint_Typ (Spalte) );
Типы данных определяют вид и формат данных, хранящихся в столбце, например INT для целых чисел или VARCHAR для текста. Ограничения вроде PRIMARY KEY, FOREIGN KEY, UNIQUE или NOT NULL обеспечивают целостность данных.
Постараюсь объяснить SQL-команду CONSTRAINT для таблиц как можно проще:
Ограничение (CONSTRAINT) - это правило, которое ты устанавливаешь для столбца или таблицы в базе данных. Эти правила гарантируют, что в таблицу могут быть введены только определённые, разрешённые тобой данные.
Существуют различные типы ограничений:
PRIMARY KEY - определяет, что каждая запись в этом столбце должна иметь уникальное значение, например номер клиента. Два клиента не могут иметь одинаковый номер. FOREIGN KEY - связывает данные между двумя таблицами, например заказы клиента с его контактной информацией. NOT NULL - означает, что этот столбец всегда должен иметь значение и не может быть пустым. UNIQUE - похоже на PRIMARY KEY, но значения в этом столбце не могут повторяться. CHECK - ты устанавливаешь диапазон значений, например возраст должен быть между 18 и 99.
Ограничения помогают предотвратить попадание неправильных, противоречивых или дублирующихся данных в базу данных. Они служат контролем качества для твоих данных.
ALTER TABLE - модификация таблицы
ALTER TABLE TabellenName ADD Spalte Datentyp, DROP COLUMN Spalte, ALTER COLUMN Spalte Datentyp;
С помощью ALTER TABLE можно добавлять, удалять или изменять столбцы.
DROP TABLE - удаление таблицы
DROP TABLE TabellenName;
Удаляет всю SQL-таблицу, включая все данные.
SQL-ограничения
PRIMARY KEY (Spalte) - уникальный ключ для каждой строки FOREIGN KEY (Spalte) REFERENCES andereTabelle(PrimärSchlüssel) - связь между таблицами UNIQUE (Spalte) - уникальные значения в столбце NOT NULL - отсутствие NULL-значений в столбце CHECK (Bedingung) - ограничение диапазона значений Ограничения обеспечивают целостность и согласованность данных. Индексы
CREATE INDEX IndexName ON TabellenName (Spalte);
Индексы ускоряют поиск записей по индексированному(ым) столбцу(ам). С помощью этих инструкций ты можешь управлять таблицами, определять типы данных и ограничения, а также создавать индексы для повышения производительности.
Модель базы данных
Нормализация для обеспечения целостности данных
Связи: One-to-One, One-to-Many, Many-to-Many
Вот объяснение и руководство по моделям баз данных, нормализации и связям:
Модель базы данных и нормализация
Модель базы данных описывает, как данные структурируются и организуются в базе данных. Нормализация оптимизирует логическую структуру базы данных для предотвращения избыточности и проблем с целостностью. Нормализация выполняется путём применения правил (первая, вторая, третья нормальная форма и т.д.) к таблицам:
Каждая ячейка таблицы может содержать только одно значение. Каждый столбец должен иметь уникальное имя. Разные данные должны храниться в отдельных таблицах.
Цель - хранить данные без избыточности, последовательно и эффективно. Хорошо нормализованные базы данных минимизируют аномалии при операциях вставки, обновления и удаления.
Связи между SQL-таблицами
Нормализация приводит к созданию отдельных таблиц, которые связываются через определённые отношения. В зависимости от кардинальности различают:
One-to-One (1:1)
Одна строка из таблицы A соответствует ровно одной строке из таблицы B. Пример: у одного человека есть ровно один паспорт.
One-to-Many (1:N)
Одна строка из таблицы A соответствует множеству строк из таблицы B. Пример: один клиент имеет много заказов.
Many-to-Many (N:M)
Несколько строк из таблицы A соответствуют множеству строк из таблицы B. Требует вспомогательную таблицу. Пример: студенты посещают несколько курсов, каждый курс посещают несколько студентов.
Благодаря этим связям данные можно объединять и запрашивать через границы таблиц без создания избыточности.
Транзакции
COMMIT и ROLLBACK
Уровни изоляции для обеспечения консистентности
Вот руководство по транзакциям в SQL с использованием COMMIT, ROLLBACK и уровней изоляции:
Транзакции
Транзакция это последовательность SQL-инструкций, которые рассматриваются как логическая единица. Либо все инструкции выполняются успешно, либо ни одна. Это обеспечивает атомарность и консистентность данных.
START TRANSACTION;
SQL-инструкция 1;
SQL-инструкция 2;
...
COMMIT
COMMIT фиксирует изменения, внесённые SQL-инструкциями внутри транзакции, в базу данных.
COMMIT;
Все изменения, произведённые после START TRANSACTION, записываются. После этого транзакция завершается.
ROLLBACK
ROLLBACK отменяет все изменения внутри транзакции.
ROLLBACK;
Данные возвращаются в исходное состояние, которое было до START TRANSACTION.
Уровни изоляции
Они определяют, как одновременно выполняемые транзакции видят друг друга и влияют друг на друга:
- READ UNCOMMITTED - возможны грязные чтения, нет консистентности
- READ COMMITTED - доступны только закоммиченные данные, нет фантомных проблем
- REPEATABLE READ - блокировки при чтении, нет потерянных обновлений
- SERIALIZABLE - блокировки при записи, полная изоляция транзакций
Чем выше уровень, тем лучше консистентность данных и изоляция, но возрастает overhead.
Транзакции с COMMIT/ROLLBACK и установленным уровнем изоляции это основа надёжной и корректной работы базы данных. Они предотвращают ущерб от конкурирующего доступа.
Безопасность
Пользователи, роли, права доступа
Защита от SQL-инъекций
Вот руководство по аспектам безопасности в SQL: пользователи, роли, права доступа и защита от SQL-инъекций:
Пользователи и права доступа
В SQL-базах данных можно создавать отдельные учётные записи пользователей. Каждому пользователю назначаются только необходимые права (принцип need-to-know):
Создание нового пользователя
CREATE User 'schutzgeist'@'localhost' IDENTIFIED BY 'passwort123';
Предоставление прав на чтение таблицы
GRANT SELECT ON mitarbeiter TO 'schutzgeist'@'localhost';
Предоставление прав на запись и изменение данных в таблице
GRANT INSERT, UPDATE ON bestellungen TO 'schutzgeist'@'localhost';
Все права на базу данных
GRANT ALL PRIVILEGES ON firma.* TO 'schutzgeist'@'localhost';
Роли в SQL
Вместо выдачи прав каждому пользователю отдельно можно определить роли и добавлять пользователей в эти роли:
Создание новой роли
CREATE ROLE 'ServicesAdmin';
Предоставление роли прав на чтение
GRANT SELECT ON finanzen.* TO 'ServicesAdmin';
Добавление пользователя в роль
GRANT 'Servicesadmin' TO 'schutzgeist'@'localhost';
Защита от SQL-инъекций
SQL-инъекции это атаки, при которых вредоносный SQL-код внедряется через непроверенные данные от пользователя. Это может привести к компрометации всей базы данных.
Чтобы этого избежать:
- Никогда не вставляйте непроверенные данные пользователя прямо в SQL-команды
- Используйте подготовленные инструкции (prepared statements) или параметризацию запросов
- Выдавайте приложениям минимально необходимые права
- Валидируйте и очищайте входные данные (экранирование, ограничение длины)
- Устанавливайте последние патчи для системы баз данных
Благодаря ограничительной политике управления пользователями, ролями и правами доступа, а также защите от SQL-инъекций можно эффективно защитить безопасность и целостность базы данных.
SQL-инъекции входят в число наиболее частых и опасных уязвимостей в веб-приложениях. В этом руководстве вы узнаете, как защитить ваши приложения от SQL-инъекций. Мы рассмотрим это пошагово и объясним как основные концепции, так и продвинутые техники.
Содержание — защита от SQL-инъекций
- Что такое SQL-инъекция
- Как работают SQL-инъекции
- Профилактические меры против SQL-инъекций
- Подготовленные инструкции (Prepared Statements)
- Использование хранимых процедур
- Валидация и очистка входных данных
- Минимизация прав пользователей базы данных
- Использование ORM (Object-Relational Mapping)
- Инструменты и библиотеки для безопасности
- Best practices и дополнительные ресурсы
1. Что такое SQL-инъекция
SQL-инъекция это уязвимость, позволяющая злоумышленнику внедрить вредоносный SQL-код в запрос, отправляемый в базу данных. Это может привести к несанкционированному доступу к данным, их потере или модификации.
2. Как работают SQL-инъекции
SQL-инъекции возникают, когда данные от пользователя встраиваются прямо в SQL-запросы без надлежащей валидации или очистки. Простой пример:
SELECT * FROM users WHERE username = 'user' AND password = 'pass';
Злоумышленник может использовать следующий ввод:
Имя пользователя: ’ OR ‘1’=‘1 Пароль: ” OR ‘1’=‘1
Это приведёт к запросу, который всегда возвращает истину:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';
3. Профилактические меры против SQL-инъекций
Подготовленные инструкции (Prepared Statements)
Prepared statements это SQL-запросы, в которых структура запроса компилируется заранее, а данные от пользователя передаются как параметры. Это предотвращает изменение SQL-кода входными данными.
Пример на PHP с PDO:
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->execute(['username' => $username, 'password' => $password]);
Использование хранимых процедур
Хранимые процедуры это SQL-программы, сохранённые в базе данных и вызываемые из приложения. Они изолируют SQL-код и предотвращают прямую модификацию через данные пользователя.
Пример на MySQL:
DELIMITER //
CREATE PROCEDURE GetUser(IN username VARCHAR(50), IN password VARCHAR(50))
BEGIN
SELECT * FROM users WHERE username = username AND password = password;
END //
DELIMITER ;
Валидация и очистка входных данных
Все входные данные должны проверяться на корректность и очищаться. Это включает проверку на ожидаемый тип данных, ограничения по длине и специальные символы.
Пример на PHP:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
Минимизация прав пользователей базы данных
Выдавайте только минимально необходимые права пользователям базы данных. Это ограничивает ущерб, который может нанести злоумышленник, если ему удаётся получить доступ.
Пример:
Создайте пользователя с правами только на чтение:
CREATE User 'readonly'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON mydatabase.* TO 'readonly'@'localhost';
Использование ORM (Object-Relational Mapping)
ORM-библиотеки предоставляют абстракцию над доступом к базе данных и по умолчанию защищают от SQL-инъекций. Примеры: Hibernate для Java и Entity Framework для .NET.
Пример на Python с SQLAlchemy:
user = session.query(User).filter_by(username='user', password='pass').first()
4. Инструменты и библиотеки для безопасности
- SQLMap: открытый инструмент для обнаружения и эксплуатации SQL-инъекций
- OWASP ZAP: сканер безопасности, способный обнаруживать SQL-инъекции и другие уязвимости
- ESAPI: API от OWASP, предоставляющий механизмы защиты от распространённых уязвимостей
5. Best practices и дополнительные ресурсы
Code reviews
Проводите регулярные проверки кода для выявления уязвимостей безопасности.
Автоматизированные тесты
Реализуйте тесты, специально нацеленные на обнаружение SQL-инъекций.
Производительность
Индексирование
Оптимизация запросов
Руководство по аспектам производительности в SQL базах данных — индексирование и оптимизация запросов: Индексирование
Индексы обеспечивают быстрый доступ к данным в таблицах базы данных. Они работают подобно указателям в книгах и значительно ускоряют поиск.
Создание индекса для одной колонки
CREATE INDEX index_name ON tabelle (spalte);
Составной индекс для нескольких колонок
CREATE INDEX index_name ON tabelle (spalte1, spalte2);
Лучше всего индексировать колонки, которые часто используются в WHERE, JOIN или ORDER BY предложениях. Однако слишком много индексов может замедлить операции записи.
Оптимизация запросов
Оптимизация SQL запросов значительно улучшает производительность приложений базы данных.
Общие рекомендации:
- Индексирование: используйте индексы для часто запрашиваемых колонок
- EXPLAIN: анализируйте планы выполнения с помощью EXPLAIN
- Избегайте вложенных запросов: используйте JOINs вместо множества подзапросов
- Паттерны LIKE начинаются с символов: ‘name%’ вместо ‘%name%’
- LIMIT и пагинация: для больших объёмов данных не выбирайте все строки сразу
Специальные техники:
- Секционирование: для очень больших таблиц разделяйте по диапазонам дат и т.д.
- Индексированные представления: выполняйте запросы из представлений вместо сложных запросов к таблицам
- Кеширование: сохраняйте результаты запросов, например в Redis
- Репликация: используйте read-only реплики для распределения операций чтения
- Sharding: распределяйте базу данных на несколько серверов при очень больших объёмах данных
Регулярный мониторинг и оптимизация медленных запросов и узких мест (hotspots) — это ключ к высокопроизводительному приложению базы данных.
Администрирование баз данных
Резервное копирование, репликация, кластеризация
Импорт/Экспорт
Руководство по администрированию баз данных включает резервное копирование, репликацию, кластеризацию, а также импорт и экспорт данных:
Резервное копирование
Регулярные резервные копии защищают от потери данных и обеспечивают восстановление при сбоях.
Полное резервное копирование
mysqldump --user=root --password --databases datenbank1 datenbank2 > backup.sql
Создаёт файл резервной копии backup.sql с полным содержимым всех баз данных.
Инкрементальное резервное копирование
mysqldump --user=root --password --databases datenbank1 --single-transaction > incrbackup.sql
Копируются только данные, изменённые после последней резервной копии.
Репликация
Позволяет распределять данные на несколько систем для обеспечения высокой доступности и балансировки нагрузки.
На Master:
CHANGE MASTER TO MASTER_LOG_FILE='log_file', MASTER_LOG_POS=log_position;
На Slave:
SLAVE START;
Кластеризация
Несколько серверов образуют кластер для распределения производительности и нагрузки. Объединяет Master и Slave в синхронизированную конфигурацию высокой доступности.
NDB Cluster (MySQL)
SQL-Node: маршрутизация запросов
mysqld --ndb-cluster --ndb-connectstring=192.168.0.1
Настройка узлов данных и управления
Импорт/Экспорт
Импорт данных из файла резервной копии
mysql --user=root --password datenbank < backup.sql
Импорт данных из CSV файла
LOAD DATA INFILE '/tmp/daten.csv'
INTO TABLE tabelle
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Экспорт данных в CSV
SELECT *
FROM tabelle
INTO OUTFILE '/tmp/daten.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Эти команды и процессы являются центральными для управления, защиты, распределения и обмена данными в базах данных. Тщательное администрирование критично для производительности, доступности и защиты данных.
Рекомендуемая литература: Базы данных
Keine Bücher für Kategorie "datenbanken" gefunden.
Другие статьи о базах данных
Базы данных и SQL — это фундаментальные технологии разработки программного обеспечения. Следующие статьи помогут вам понять и освоить все аспекты работы с базами данных.
SQL и безопасность
- SQL Injection уязвимость и защита - Подробное руководство по безопасности с практическими примерами
- Сравнение SQL и NoSQL - Сравнение реляционных и документоориентированных баз данных



