DML (Data Manipulation Language) — это подмножество SQL, которое включает команды для работы с данными в базе данных. DML-операции позволяют манипулировать данными: добавлять, читать, изменять и удалять записи в таблицах.
Проще говоря, DML — это “инструменты для работы с содержимым” базы данных, в то время как DDL работает со структурой.
Основные команды DML
1. SELECT — выборка данных
Чтение данных из таблиц.
SELECT * FROM employees;
SELECT name, salary FROM employees WHERE department = 'IT';2. INSERT — вставка данных
Добавление новых записей в таблицу.
INSERT INTO employees (name, department, salary)
VALUES ('Иван Иванов', 'IT', 75000);3. UPDATE — обновление данных
Изменение существующих записей.
UPDATE employees
SET salary = 80000
WHERE name = 'Иван Иванов';4. DELETE — удаление данных
Удаление записей из таблицы.
DELETE FROM employees
WHERE department = 'HR';Характеристики DML
-
Работа с данными, а не структурой
- DML манипулирует содержимым таблиц
- Не изменяет саму структуру базы данных
-
Поддержка транзакций
- DML-операции могут быть частью транзакций
- Можно откатывать (ROLLBACK) или подтверждать (COMMIT)
-
Влияние на целостность данных
- DML-операции проверяют ограничения целостности
- Могут активировать триггеры
Примеры использования DML
Сценарий 1: Добавление нового сотрудника
INSERT INTO employees (id, name, department, salary, hire_date)
VALUES (101, 'Мария Петрова', 'Marketing', 60000, '2024-01-15');Сценарий 2: Повышение зарплаты отделу
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';Сценарий 3: Увольнение сотрудника
DELETE FROM employees
WHERE id = 100 AND name = 'Иван Сидоров';Сценарий 4: Получение аналитики
SELECT department, COUNT(*) as emp_count, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;DML vs DDL
| Критерий | DML | DDL |
|---|---|---|
| Назначение | Работа с данными | Работа со структурой |
| Основные команды | SELECT, INSERT, UPDATE, DELETE | CREATE, ALTER, DROP |
| Транзакции | Поддерживаются | Обычно auto-commit |
| Откат изменений | Возможен через ROLLBACK | Сложнее или невозможен |
| Пример | UPDATE employees SET salary = 1000 | CREATE TABLE employees (...) |
Расширенные возможности DML
MERGE (UPSERT)
Объединение INSERT и UPDATE в одной операции:
MERGE INTO employees AS target
USING new_employees AS source
ON target.id = source.id
WHEN MATCHED THEN
UPDATE SET target.salary = source.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary)
VALUES (source.id, source.name, source.salary);CALL
Вызов хранимых процедур:
CALL calculate_year_end_bonus();Важные аспекты DML
-
Производительность
- Операции UPDATE и DELETE без WHERE могут быть медленными
- Индексы ускоряют SELECT, но замедляют INSERT/UPDATE
-
Блокировки
- DML-операции могут блокировать данные
- Длительные операции могут влиять на других пользователей
-
Журналирование
- Большинство СУБД ведет журнал DML-операций
- Позволяет восстанавливать данные после сбоев
Лучшие практики DML
-
Всегда используйте WHERE в UPDATE/DELETE
-- ОПАСНО! DELETE FROM employees; -- ПРАВИЛЬНО DELETE FROM employees WHERE id = 100; -
Используйте транзакции для групп операций
BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -
Проверяйте влияние операций
-- Сначала посмотреть, что будет затронуто SELECT COUNT(*) FROM employees WHERE department = 'HR'; -- Затем выполнять удаление DELETE FROM employees WHERE department = 'HR';
Итог
DML — это фундаментальная часть SQL, которая обеспечивает всю основную работу с данными: чтение, добавление, изменение и удаление. Понимание DML критически важно для любого разработчика, аналитика или администратора баз данных, поскольку эти операции составляют основу повседневной работы с базами данных.