ProgrammationDéveloppeur Backend

Expliquez la différence entre les commandes DDL et DML en SQL, donnez des exemples et expliquez comment cela affecte en pratique les droits d'accès et les transactions.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

DDL (Data Definition Language) — c'est un langage de définition des données, destiné à définir la structure de la base de données (création, modification, suppression de tables, schémas, index, etc.) :

  • Exemples de commandes : CREATE TABLE, ALTER TABLE, DROP TABLE.
  • Les commandes DDL sont généralement automatiquement enregistrées dans la base de données (autocommit), ce qui rend difficile l'annulation des modifications.

DML (Data Manipulation Language) — c'est un langage de manipulation des données, qui travaille avec le contenu des tables (ajout, modification, suppression, sélection de lignes) :

  • Exemples de commandes : INSERT, UPDATE, DELETE, SELECT.
  • Les commandes DML peuvent généralement être enveloppées dans une transaction et peuvent être annulées avant le commit.

Par exemple, différents utilisateurs peuvent avoir différents droits seulement sur DML ou seulement sur DDL :

  • Aux applications ordinaires, on interdit souvent DDL afin de ne pas permettre de modifier accidentellement la structure de la base de données ;
  • DML est autorisé pour manipuler les données.

Exemple :

-- DDL : création de table CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML : insertion de données INSERT INTO users (id, name) VALUES (1, 'Ivan');

Question piégeuse

"Peut-on annuler une commande DDL (par exemple, DROP TABLE) si elle a été exécutée dans une transaction explicite ?"

La plupart des SGBD (par exemple, PostgreSQL, Oracle) prennent en charge les transactions pour DDL, mais beaucoup ne permettent pas d'annuler les commandes DDL, même si elles sont explicitement enveloppées dans une transaction. Dans MySQL, les commandes DDL sont toujours enregistrées immédiatement.

Exemple :
BEGIN; DROP TABLE employees; ROLLBACK;

Dans la plupart des cas, la table sera définitivement supprimée, même après un rollback.

Exemples d'erreurs réelles dues à la méconnaissance des nuances du sujet


Histoire

Perte d'une table en environnement de développement après une exécution accidentelle de DROP TABLE — la commande est irréversible, malgré le rollback de transaction.


Histoire

L'organisation a accordé des droits administratifs à un projet qui, en raison d'un bug, a produit des modifications massives de la structure de la base de données via ALTER, ce qui a entraîné un long temps d'arrêt du service et une perte de commandes.


Histoire

En refusant les droits DDL aux débutants, l'équipe a oublié que les procédures de déploiement de migrations nécessitent l'accès DDL — la sortie a échoué après plusieurs heures d'enquêtes et d'élévation urgente des rôles.