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

Язык манипуляции данными

Язык манипуляции данными (Data Manipulation Language, DML) — это подмножество языков программирования, предназначенное для извлечения, вставки, обновления и удаления данных в базах данных (БД). В отличие от языка определения данных (DDL), который управляет структурой БД (создание, изменение таблиц), и языка управления данными (DCL), регулирующего права доступа, DML обеспечивает непосредственное взаимодействие с содержимым таблиц. Основным промышленным стандартом DML является язык SQL (Structured Query Language), хотя существуют и другие реализации, например, в NoSQL-системах.

История

Концепция манипуляции данными возникла вместе с первыми системами управления базами данных (СУБД) в 1960-х годах. Ранние иерархические и сетевые модели (например, IMS от IBM и IDMS) использовали навигационные языки, требующие от программиста явного указания путей доступа к записям. В 1970 году Эдгар Кодд предложил реляционную модель, которая легла в основу SQL. Первая коммерческая реализация SQL появилась в СУБД System R (IBM) в середине 1970-х годов.

В 1986 году ANSI (Американский национальный институт стандартов) принял первый стандарт SQL, который включал базовые операторы DML. Последующие версии стандарта (SQL:1999, SQL:2003, SQL:2016 и другие) расширили возможности DML, добавив поддержку рекурсивных запросов, оконных функций, выражений общего табличного выражения (CTE) и операторов MERGE (upsert). С развитием NoSQL-движения в 2000-х годах появились альтернативные DML, ориентированные на документные, графовые и ключ-значение модели данных.

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

В реляционных СУБД (РСУБД) стандартными операторами DML являются четыре команды, часто называемые CRUD (Create, Read, Update, Delete):

SELECT

Оператор SELECT используется для извлечения данных из одной или нескольких таблиц. Он позволяет задавать условия фильтрации (WHERE), сортировку (ORDER BY), группировку (GROUP BY) и соединение таблиц (JOIN). Пример: SELECT name, age FROM employees WHERE department = 'IT' ORDER BY age DESC;

INSERT

Оператор INSERT добавляет новые строки (записи) в таблицу. Он может вставлять одну строку с явным указанием значений или множество строк из результата другого запроса. Пример: INSERT INTO employees (name, age, department) VALUES ('Иванов', 30, 'IT');

UPDATE

Оператор UPDATE изменяет существующие записи в таблице. Он обязательно использует условие WHERE для указания, какие строки следует обновить; при его отсутствии обновляются все строки таблицы, что часто является ошибкой. Пример: UPDATE employees SET age = 31 WHERE name = 'Иванов';

DELETE

Оператор DELETE удаляет строки из таблицы. Как и UPDATE, он требует указания условия WHERE для предотвращения массового удаления. Пример: DELETE FROM employees WHERE name = 'Иванов';

Разновидности

Процедурные и декларативные DML

  • Декларативные DML (например, SQL) — пользователь описывает, какие данные нужны, не указывая способ их получения. СУБД сама оптимизирует запрос.
  • Процедурные DML (например, PL/SQL, T-SQL) — позволяют встраивать циклы, условия и вызовы функций, что даёт более тонкий контроль над обработкой данных, но требует большего объёма кода.

DML в NoSQL-системах

  • Документные СУБД (MongoDB) — используют JSON-подобные запросы: db.collection.find({department: "IT"}) (аналог SELECT) и db.collection.updateOne({name: "Иванов"}, {$set: {age: 31}}) (аналог UPDATE).
  • Графовые СУБД (Neo4j) — применяют язык Cypher: MATCH (e:Employee {name: "Иванов"}) RETURN e.age (аналог SELECT).
  • Ключ-значение СУБД (Redis) — операции GET, SET, DEL.

DML в распределённых системах

В распределённых базах данных (например, Apache Cassandra, Google Spanner) DML-операции должны учитывать согласованность данных (consistency) и устойчивость к разделению (partition tolerance). В таких системах часто используются механизмы «лёгких транзакций» (lightweight transactions) для атомарного выполнения операций.

Применение

Обработка транзакций

DML является основой для операционных систем (OLTPOnline Transaction Processing). Каждая операция в банковском переводе, заказе в интернет-магазине или бронировании билета включает INSERT, UPDATE или DELETE. Для обеспечения целостности данных эти операции группируются в транзакции, которые поддерживают свойства ACID (атомарность, согласованность, изоляция, долговечность).

Аналитика и отчётность

Оператор SELECT с агрегатными функциями (SUM, AVG, COUNT) и группировками используется в системах бизнес-аналитики (BI) для построения отчётов. Например, SELECT department, AVG(age) FROM employees GROUP BY department; вычисляет средний возраст по отделам.

Массовая загрузка и выгрузка

Для переноса больших объёмов данных между системами применяются специализированные инструменты (например, SQL*Loader в Oracle, BULK INSERT в SQL Server), которые используют DML-команды в пакетном режиме.

Веб-приложения и API

Современные веб-фреймворки (Django, Spring, Ruby on Rails) генерируют DML-запросы на основе действий пользователя. Например, при сохранении формы регистрации выполняется INSERT в таблицу users.

Безопасность

SQL-инъекции

Наиболее распространённая уязвимость, связанная с DML, — SQL-инъекция. Злоумышленник может внедрить вредоносный код в строку запроса, что приведёт к несанкционированному чтению, изменению или удалению данных. Для защиты рекомендуется использовать параметризованные запросы (prepared statements) и экранирование пользовательского ввода.

Права доступа

DML-операции контролируются через DCL-команды GRANT и REVOKE. Например, пользователю можно дать право только на SELECT в определённой таблице, запретив UPDATE и DELETE.

Аудит

Многие СУБД ведут журналы DML-операций (audit logs), которые фиксируют, кто, когда и какие данные изменил. Это необходимо для соблюдения нормативных требований (например, Федерального закона № 152-ФЗ «О персональных данных» в России).

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

  • Производительность при сложных запросах: Вложенные SELECT и множественные JOIN могут приводить к медленному выполнению на больших объёмах данных. Для оптимизации используются индексы и материализованные представления.
  • Сложность транзакций: В распределённых системах обеспечение ACID-свойств для DML-операций может быть дорогим с точки зрения производительности, что привело к появлению NoSQL-решений с моделью BASE (Basically Available, Soft state, Eventually consistent).
  • Отсутствие стандартизации в NoSQL: Каждая NoSQL-СУБД имеет свой DML, что затрудняет перенос приложений между системами.
  • Риск человеческой ошибки: Операторы UPDATE и DELETE без условия WHERE могут привести к необратимой потере данных. Для предотвращения этого рекомендуется использовать транзакции и резервное копирование.

Интересные факты

  • В ранних версиях SQL команда SELECT отсутствовала; её роль выполняла команда RETRIEVE.
  • Оператор MERGE (upsert) был добавлен в стандарт SQL:2003 и позволяет выполнить INSERT или UPDATE в одной команде в зависимости от существования записи.
  • В России для работы с базами данных в государственных информационных системах часто используются СУБД, включённые в Единый реестр российских программ для электронных вычислительных машин и баз данных, такие как Postgres Professional (на основе PostgreSQL) и «Линтер».

Источники

  1. Codd, E. F. (1970). A Relational Model of Data for Large Shared Data Banks. Communications of the ACM.
  2. ISO/IEC 9075-1:2016 Information technology — Database languages — SQL — Part 1: Framework.
  3. Date, C. J. (2003). An Introduction to Database Systems (8th ed.). Addison-Wesley.
  4. Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
  5. Документация PostgreSQL 16: Data Manipulation Language.
  6. Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных».

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

На главную BFOmetr →