← Назад к вопросам

Что такое DDL и DML команды в SQL?

1.6 Junior🔥 111 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

DDL и DML: основные команды управления данными в SQL

В контексте SQL команды делятся на несколько категорий, но DDL (Data Definition Language) и DML (Data Manipulation Language) являются фундаментальными. Как QA Automation Engineer, я регулярно использую их для подготовки тестовых сред, валидации состояний баз данных и создания/модификации тестовых данных.

DDL (Data Definition Language) — язык определения данных

DDL команды используются для создания, изменения и удаления структуры объектов базы данных (схемы). Они работают с метаданными и обычно требуют прав администратора. Основные характеристики: неявный коммит транзакции (в большинстве СУБД выполнение команды DDL автоматически завершает текущую транзакцию), работа на уровне структуры.

Основные команды DDL:

  • CREATE — создание новых объектов (таблиц, индексов, представлений).

    CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        department_id INT,
        hire_date DATE
    );
    CREATE INDEX idx_department ON employees(department_id);
    
  • ALTER — изменение существующей структуры объектов.

    ALTER TABLE employees ADD COLUMN salary DECIMAL(10,2);
    ALTER TABLE employees MODIFY COLUMN name VARCHAR(150);
    
  • DROP — полное удаление объекта из базы данных.

    DROP TABLE temp_logs;
    DROP INDEX idx_department;
    
  • TRUNCATE — быстрое удаление всех строк из таблицы с сохранением её структуры. Критически важно в автотестах для очистки данных, так как он не сканирует строки и обычно не вызывает триггеры.

    TRUNCATE TABLE test_results;
    

DML (Data Manipulation Language) — язык манипуляции данными

DML команды предназначены для работы непосредственно с данными внутри таблиц. Это основа для CRUD-операций (Create, Read, Update, Delete). Они манипулируют содержимым таблиц и требуют явного коммита или отката транзакции (если не используется автокоммит).

Основные команды DML:

  • SELECT — извлечение данных (часто выделяют в отдельную категорию DQL, но традиционно относят к DML).

    SELECT id, name FROM employees WHERE department_id = 5;
    
  • INSERT — добавление новых строк данных.

    INSERT INTO employees (id, name, department_id) VALUES (1, 'Иван Петров', 3);
    
  • UPDATE — изменение существующих данных.

    UPDATE employees SET salary = salary * 1.1 WHERE hire_date < '2023-01-01';
    
  • DELETE — удаление строк из таблицы с возможностью фильтрации WHERE. В отличие от TRUNCATE, операция логируется, может вызывать триггеры и удаляет данные построчно.

    DELETE FROM employees WHERE id = 42;
    
  • MERGE (UPSERT) — комбинированная операция вставки или обновления (доступна не во всех СУБД).

Ключевые различия с точки зрения автоматизации тестирования

  1. Область воздействия: DDL меняет «правила игры» (схему), DML — «игроков и их действия» (данные).
  2. Транзакционность: DDL команды часто не могут быть откатаны в рамках пользовательской транзакции (зависит от СУБД). DML-операции — основа атомарных транзакций.
  3. Использование в тестах:
    *   **DDL** применяется на этапе **подготовки тестового окружения** (миграции, развёртывание схемы) или в тестах, проверяющих само изменение структуры БД.
    *   **DML** — это ежедневный инструмент. Им мы:
        *   **Arrange (Подготавливаем):** Наполняем базу тестовыми данными (`INSERT`) перед запуском сценария.
        *   **Act (Выполняем):** Иногда вызываем бизнес-логику через прямые DML-вызовы.
        *   **Assert (Проверяем):** С помощью `SELECT` верифицируем, что состояние данных соответствует ожиданиям после выполнения теста.
        *   **Очищаем:** Используем `DELETE` (или предпочтительнее `TRUNCATE` в DDL) в tear-down-методах для изоляции тестов.

Пример сценария автотеста:

-- Этап подготовки (часто вынесен в setUp). Может быть DDL, если таблица временная.
CREATE TEMP TABLE test_orders (id SERIAL, sum NUMERIC);

-- Arrange (DML): Подготовка начального состояния.
INSERT INTO test_orders (sum) VALUES (100.50), (200.00);

-- Act: Вызов тестируемого метода API, который, например, применяет скидку.
-- Предположим, метод обновляет заказы с sum > 150.

-- Assert (DML): Проверка результата.
SELECT sum FROM test_orders WHERE id = 2;
-- Ожидаем, что sum стала 180.00 (скидка 10%).

-- Очистка (DDL/DML). TRUNCATE быстрее, но для temp таблиц часто используют DROP.
DROP TABLE test_orders;

Понимание нюансов DDL и DML критически важно для проектирования стабильных, быстрых и изолированных автотестов, взаимодействующих с базами данных. Это позволяет правильно выбирать стратегии управления тестовыми данными и избегать артефактов, влияющих на результаты прогонов.

Что такое DDL и DML команды в SQL? | PrepBro