Открыть сервис

DML

DML (Data Manipulation Language, язык манипулирования данными) — это подмножество языка SQL (Structured Query Language), предназначенное для извлечения, добавления, изменения и удаления данных в реляционных базах данных. DML является одной из основных частей SQL наряду с DDL (Data Definition Language, язык определения данных) и DCL (Data Control Language, язык управления данными). Операторы DML работают непосредственно с содержимым таблиц, а не с их структурой.

История и развитие

Концепция DML возникла в 1970-х годах в рамках развития реляционной модели данных, предложенной Эдгаром Коддом. Первоначально язык манипулирования данными был реализован в системе System R, разработанной в исследовательском центре IBM. В 1986 году ANSI (Американский национальный институт стандартов) принял первый стандарт SQL, который включал базовые операторы DML. Впоследствии стандарт неоднократно обновлялся (SQL:1999, SQL:2003, SQL:2008, SQL:2016), расширяя возможности манипулирования данными, включая поддержку оконных функций, рекурсивных запросов и MERGE-операций.

Основные операторы DML

Стандарт SQL определяет четыре основных оператора DML:

SELECT

Оператор SELECT используется для извлечения данных из одной или нескольких таблиц. Он является наиболее часто используемым оператором SQL. Базовая конструкция включает указание столбцов, источника данных (таблицы) и условий фильтрации:

``sql SELECT column1, column2 FROM table_name WHERE condition; ``

SELECT поддерживает множество расширений: соединения (JOIN), группировку (GROUP BY), сортировку (ORDER BY), агрегатные функции (COUNT, SUM, AVG, MIN, MAX) и подзапросы.

INSERT

Оператор INSERT добавляет новые строки в таблицу. Существует две основные формы:

``sql INSERT INTO table_name (column1, column2) VALUES (value1, value2); ``

``sql INSERT INTO table_name SELECT ... FROM another_table; ``

UPDATE

Оператор UPDATE изменяет существующие данные в таблице. Он требует указания изменяемой таблицы, новых значений и условий, определяющих, какие строки будут затронуты:

``sql UPDATE table_name SET column1 = new_value1 WHERE condition; ``

Без условия WHERE оператор UPDATE применится ко всем строкам таблицы, что может привести к нежелательным последствиям.

DELETE

Оператор DELETE удаляет строки из таблицы. Как и UPDATE, он обычно использует условие WHERE для ограничения удаляемых строк:

``sql DELETE FROM table_name WHERE condition; ``

Без условия WHERE оператор удалит все строки таблицы, но не саму таблицу (в отличие от DDL-оператора DROP TABLE).

Дополнительные операторы и расширения

MERGE (UPSERT)

Оператор MERGE (также известный как UPSERT) выполняет условное обновление или вставку данных. Он позволяет синхронизировать данные между источником и целевой таблицей: если запись существует, она обновляется; если нет — вставляется. MERGE был добавлен в стандарт SQL:2003.

TRUNCATE

Хотя TRUNCATE формально относится к DDL (так как изменяет структуру хранения данных), по своему действию (удаление всех строк таблицы) он близок к DML. TRUNCATE работает быстрее DELETE без условия, так как не генерирует журнал транзакций для каждой удалённой строки.

CALL

Оператор CALL используется для вызова хранимых процедур, которые могут содержать DML-операции.

Транзакции и DML

Операторы DML обычно выполняются в контексте транзакций. Транзакция — это логическая единица работы, которая обладает свойствами ACID (атомарность, согласованность, изолированность, долговечность). Основные команды управления транзакциями:

Возможность отката изменений является ключевым отличием DML от DDL: многие DDL-операторы (например, CREATE TABLE) в ряде СУБД не могут быть отменены.

Различия в реализациях СУБД

Несмотря на стандартизацию, конкретные реализации DML в различных системах управления базами данных (СУБД) имеют особенности:

Безопасность и производительность

Предотвращение SQL-инъекций

Операторы DML, особенно формируемые динамически с конкатенацией пользовательского ввода, уязвимы для SQL-инъекций — атак, при которых злоумышленник может выполнить произвольные запросы к базе данных. Основные методы защиты:

Оптимизация DML-операций

Производительность DML-операций зависит от многих факторов:

Критика и ограничения

Основные ограничения DML связаны с реляционной моделью данных:

Применение в современных системах

DML используется во всех приложениях, работающих с реляционными базами данных: веб-приложения, ERP-системы, CRM-системы, банковские системы, системы управления контентом. В современных архитектурах микросервисов DML применяется для взаимодействия с базами данных каждого сервиса, при этом часто используются ORM (Object-Relational Mapping) библиотеки, которые генерируют DML-запросы автоматически.

Источники

  1. ISO/IEC 9075-2:2016 — Information technology — Database languages — SQL — Part 2: Foundation (SQL/Foundation).
  2. C. J. Date — An Introduction to Database Systems (8th edition), Addison-Wesley, 2004.
  3. Гарсиа-Молина, Г., Ульман, Дж., Уидом, Дж. — Системы баз данных: полный курс, Вильямс, 2012.
  4. Документация PostgreSQL 16 — Chapter 6: Data Manipulation.
  5. Документация MySQL 8.0 — SQL Statements: Data Manipulation Statements.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →