ProgrammazioneSviluppatore Backend

Spiega la differenza tra comandi DDL e DML in SQL, fornisci esempi e spiega come questo influisce concretamente sui diritti di accesso e sulle transazioni.

Supera i colloqui con l'assistente IA Hintsage

Risposta

DDL (Data Definition Language) — è un linguaggio di definizione dei dati, progettato per definire la struttura del database (creazione, modifica, eliminazione di tabelle, schemi, indici, ecc.):

  • Esempi di comandi: CREATE TABLE, ALTER TABLE, DROP TABLE.
  • I comandi DDL di solito vengono registrati automaticamente nel DB (autocommit), quindi è difficile annullare la modifica.

DML (Data Manipulation Language) — è un linguaggio di manipolazione dei dati, che lavora con il contenuto delle tabelle (inserimento, modifica, eliminazione, selezione di righe):

  • Esempi di comandi: INSERT, UPDATE, DELETE, SELECT.
  • I comandi DML di solito possono essere racchiusi in una transazione e possono essere annullati fino al commit.

Ad esempio, diversi utenti possono avere diritti diversi solo su DML o solo su DDL:

  • Alle applicazioni comuni è spesso vietato DDL, per non modificare accidentalmente la struttura del DB;
  • DML è consentito per lavorare con i dati.

Esempio:

-- DDL: creazione di una tabella CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML: inserimento di dati INSERT INTO users (id, name) VALUES (1, 'Ivan');

Domanda ingannevole

"È possibile annullare un comando DDL (ad esempio, DROP TABLE), se è stato eseguito all'interno di una transazione esplicita?"

La maggior parte dei DBMS (ad esempio, PostgreSQL, Oracle) supporta le transazioni per DDL, ma molti non consentono di annullare i comandi DDL, anche se racchiusi esplicitamente in una transazione. In MySQL i comandi DDL vengono sempre registrati immediatamente.

Esempio:
BEGIN; DROP TABLE employees; ROLLBACK;

Nella maggior parte dei casi, la tabella verrà rimossa definitivamente, anche se si esegue il rollback.

Esempi di errori reali dovuti alla mancanza di conoscenza delle sfumature dell'argomento


Storia

Perdita della tabella nell'ambiente di sviluppo dopo l'esecuzione accidentale di DROP TABLE — il comando è irreversibile, nonostante l'annullamento della transazione.


Storia

L'organizzazione ha dato diritti amministrativi al progetto, che ha causato, a causa di un bug, una modifica massiccia della schema del DB tramite ALTER, portando a un lungo downtime del servizio e perdita di ordini.


Storia

Negando i diritti su DDL ai principianti, il team ha dimenticato che le procedure per il deployment delle migratorie richiedono accesso DDL — il rilascio è fallito dopo ore di indagini e urgente elevazione dei ruoli.