ProgramaciónDesarrollador Backend

Explique la diferencia entre comandos DDL y DML en SQL, dé ejemplos y hable sobre cómo esto afecta los permisos y transacciones en la práctica.

Supere entrevistas con el asistente de IA Hintsage

Respuesta

DDL (Data Definition Language) — es un lenguaje de definición de datos destinado a definir la estructura de la base de datos (crear, modificar, eliminar tablas, esquemas, índices, etc.):

  • Ejemplos de comandos: CREATE TABLE, ALTER TABLE, DROP TABLE.
  • Los comandos DDL generalmente se registran automáticamente en la base de datos (autocommit), es decir, revertir el cambio es difícil.

DML (Data Manipulation Language) — es un lenguaje de manipulación de datos que opera sobre el contenido de las tablas (agregar, modificar, eliminar, seleccionar filas):

  • Ejemplos de comandos: INSERT, UPDATE, DELETE, SELECT.
  • Los comandos DML generalmente pueden estar envueltos en una transacción y es posible revertirlos antes del commit.

Por ejemplo, diferentes usuarios pueden tener diferentes permisos solo para DML o solo para DDL:

  • A las aplicaciones comunes a menudo se les prohíben los DDL para evitar que cambien accidentalmente la estructura de la base de datos;
  • DML se permite para trabajar con los datos.

Ejemplo:

-- DDL: crear tabla CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML: insertar datos INSERT INTO users (id, name) VALUES (1, 'Ivan');

Pregunta capciosa

"¿Se puede revertir un comando DDL (por ejemplo, DROP TABLE) si se ejecutó dentro de una transacción explícita?"

La mayoría de los SGBD (por ejemplo, PostgreSQL, Oracle) admiten transacciones para DDL, pero muchos no permiten revertir comandos DDL, incluso si están envueltos explícitamente en una transacción. En MySQL, los comandos DDL siempre se registran de inmediato.

Ejemplo:
BEGIN; DROP TABLE employees; ROLLBACK;

En la mayoría de los casos, la tabla será eliminada para siempre, incluso a pesar de la reversión.

Ejemplos de errores reales debido al desconocimiento de los matices del tema


Historia

Pérdida de una tabla en el entorno de desarrollo después de ejecutar accidentalmente DROP TABLE — el comando es irreversible, a pesar de la reversión de la transacción.


Historia

La organización otorgó permisos administrativos a un proyecto que, como resultado de un error, realizó un cambio masivo en el esquema de la base de datos a través de ALTER, lo que causó un tiempo de inactividad prolongado del servicio y pérdida de pedidos.


Historia

**Negándose a otorgar permisos DDL a los novatos, el equipo olvidó que los procedimientos para desplegar migraciones requieren acceso DDL — el lanzamiento fracasó después de varias horas de investigaciones y elevación de roles de emergencia.