ПрограммированиеBackend разработчик

Поясните различие между DDL и DML командами в SQL, приведите примеры и расскажите, как на практике это влияет на права доступа и транзакции.

Проходите собеседования с ИИ помощником Hintsage

Ответ

DDL (Data Definition Language) — это язык описания данных, предназначенный для определения структуры базы данных (создание, изменение, удаление таблиц, схем, индексов и т.п.):

  • Примеры команд: CREATE TABLE, ALTER TABLE, DROP TABLE.
  • DDL-команды обычно автоматически фиксируются в БД (autocommit), то есть отменить изменение сложно.

DML (Data Manipulation Language) — это язык манипулирования данными, который работает с содержимым таблиц (добавление, изменение, удаление, выборка строк):

  • Примеры команд: INSERT, UPDATE, DELETE, SELECT.
  • DML-команды обычно могут быть обернуты в транзакцию и откатить их возможно до коммита.

К примеру, у разных пользователей могут быть разные права только на DML или только на DDL:

  • Обычным приложениям часто запрещают DDL, чтобы не дать изменить структуру БД случайно;
  • DML разрешается для работы с данными.

Пример:

-- DDL: создание таблицы CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML: вставка данных INSERT INTO users (id, name) VALUES (1, 'Ivan');

Вопрос с подвохом

"Можно ли откатить DDL-команду (например, DROP TABLE), если она была выполнена внутри явной транзакции?"

Большинство СУБД (например, PostgreSQL, Oracle) поддерживают транзакции для DDL, но многие не позволяют откатить DDL-команды, даже если те явно обернуты в транзакцию. В MySQL DDL-команды всегда фиксируются немедленно.

Пример:
BEGIN; DROP TABLE employees; ROLLBACK;

В большинстве случаев таблица будет удалена навсегда, даже несмотря на откат.

Примеры реальных ошибок из-за незнания тонкостей темы


История

Потеря таблицы в среде разработки после случайного выполнения DROP TABLE — команда необратима, несмотря на откат транзакции.


История

Организация дала административные права проекту, который в результате бага произвёл массовое изменение схемы БД через ALTER, что привело к длительному простою сервиса и потере заказов.


История

Отказав в правах на DDL новичкам, команда забыла, что процедуры на развёртывание миграций требуют DDL access — релиз сорвался спустя несколько часов расследований и экстренного повышения ролей.