DDL (Data Definition Language) — это язык описания данных, предназначенный для определения структуры базы данных (создание, изменение, удаление таблиц, схем, индексов и т.п.):
CREATE TABLE, ALTER TABLE, DROP TABLE.DML (Data Manipulation Language) — это язык манипулирования данными, который работает с содержимым таблиц (добавление, изменение, удаление, выборка строк):
INSERT, UPDATE, DELETE, SELECT.К примеру, у разных пользователей могут быть разные права только на DML или только на DDL:
-- 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 — релиз сорвался спустя несколько часов расследований и экстренного повышения ролей.