Skip to content
IRC-CodingIRC-Coding
SQLБазы данныхMySQLPostgreSQLDatabaseSQL командыTutorialУправление данными

SQL Tutorial 2024 Команды для баз данных

Полное руководство SQL - основные команды и операции с базами данных для веб-разработки и управления данными.

S

schutzgeist

15 min read
SQL Tutorial 2024 Команды для баз данных

В этом практическом руководстве мы рассмотрим основные команды 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 и безопасность

Назад к блогу
Share:

Nächster Artikel in Программирование

Weiterlesen
Сравнение Deno vs Node.js vs Bun 2026

Похожие статьи