Quando senti “DDL SQL”, ti stai riferendo al Data Definition Language (Linguaggio di Definizione Dati). Questa parte del linguaggio SQL è usata per definire, modificare ed eliminare la struttura (o schema) degli oggetti in un database, non i dati al loro interno.
Cos’è il DDL?
Mentre il DML (Data Manipulation Language) si occupa di inserire, modificare, eliminare e leggere i dati nelle tabelle, il DDL si occupa degli “scheletri” del database: tabelle, viste, indici, stored procedure, trigger, e persino il database stesso.
Pensa al DDL come agli strumenti che un architetto userebbe per progettare e costruire le fondamenta e le pareti di un edificio. Non si preoccupa dell’arredamento o degli abitanti (quello sarebbe DML), ma della struttura portante.
Le operazioni DDL sono generalmente auto-commit. Questo significa che, una volta eseguite, le modifiche alla struttura del database sono permanenti e non possono essere facilmente annullate con un ROLLBACK (anche se in alcuni database o contesti transazionali più avanzati ci sono delle eccezioni o accorgimenti). Per questo motivo, le operazioni DDL devono essere eseguite con grande cautela, specialmente in ambienti di produzione.
I Comandi Principali del DDL
Ecco i comandi DDL più comuni e le loro funzioni:
1. CREATE: Creare Nuovi Oggetti
Il comando CREATE è usato per costruire nuovi oggetti nel database.
Scopo: Creare tabelle, database, viste, indici, stored procedure, ecc.
Esempio 1: Creare una Tabella
Questo è l’uso più frequente. Definisci il nome della tabella, i nomi delle colonne, i loro tipi di dato e i vincoli (come PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY).
SQL
CREATE TABLE Dipendenti (
ID INT PRIMARY KEY IDENTITY(1,1), -- Chiave primaria auto-incrementante
Nome VARCHAR(50) NOT NULL, -- Nome non può essere NULL
Cognome VARCHAR(50) NOT NULL, -- Cognome non può essere NULL
DataNascita DATE NULL, -- Data di nascita opzionale
Email VARCHAR(100) UNIQUE, -- Email deve essere unica
DipartimentoID INT,
CONSTRAINT FK_Dipartimento FOREIGN KEY (DipartimentoID) REFERENCES Dipartimenti(ID)
);
Esempio 2: Creare un Database (in SQL Server)
SQL
CREATE DATABASE MioNuovoDatabase;
Esempio 3: Creare un Indice
Un indice migliora le performance delle query, agendo come un indice di un libro per velocizzare la ricerca.
SQL
CREATE INDEX IX_Dipendenti_Cognome ON Dipendenti (Cognome);
2. ALTER: Modificare Oggetti Esistenti
Il comando ALTER è usato per modificare la struttura di un oggetto database esistente senza doverlo eliminare e ricreare.
Scopo: Aggiungere, eliminare o modificare colonne, aggiungere/rimuovere vincoli, rinominare oggetti (a volte).
Esempio 1: Aggiungere una Nuova Colonna a una Tabella
SQL
ALTER TABLE Dipendenti
ADD Salario DECIMAL(10, 2) NULL;
Esempio 2: Modificare il Tipo di Dato di una Colonna
SQL
ALTER TABLE Dipendenti
ALTER COLUMN Salario DECIMAL(12, 2) NOT NULL; -- Ora il salario non può essere NULL
Esempio 3: Eliminare una Colonna da una Tabella
SQL
ALTER TABLE Dipendenti
DROP COLUMN DataNascita;
3. DROP: Eliminare Oggetti
Il comando DROP elimina completamente un oggetto dal database. Questa operazione è irreversibile nella maggior parte dei casi (a meno che tu non abbia un backup!).
Scopo: Eliminare tabelle, database, viste, indici, ecc.
Esempio 1: Eliminare una Tabella
Questo comando elimina la tabella e tutti i dati al suo interno.
SQL
DROP TABLE Dipendenti;
Esempio 2: Eliminare un Database
SQL
DROP DATABASE MioNuovoDatabase;
4. TRUNCATE: Svuotare una Tabella (e resettare gli ID)
Sebbene spesso confuso con DELETE, TRUNCATE è un comando DDL perché agisce sulla definizione e sulla gestione dello spazio della tabella, non solo sui dati.
Scopo: Rimuovere tutte le righe da una tabella in modo rapido, liberando lo spazio allocato e resettando eventuali contatori IDENTITY (auto-incremento).
Esempio:
SQL
TRUNCATE TABLE Dipendenti;
Differenza con DELETE:
TRUNCATEè molto più veloce su tabelle grandi perché non registra ogni singola eliminazione nel log delle transazioni (meno overhead).TRUNCATEnon attiva i triggerDELETE.TRUNCATEresetta i contatoriIDENTITYa zero (o al valore seed iniziale).TRUNCATEnon può essere usata con una clausolaWHERE. Elimina tutto.TRUNCATEnon può essere eseguita su tabelle che hanno una relazioneFOREIGN KEYreferenziata da altre tabelle (a meno che non sia stata definita una relazioneON DELETE CASCADEo si disabilitino temporaneamente i vincoli).
5. RENAME: Rimuovere Oggetti (specifico di alcuni DB, in SQL Server si usa sp_rename)
In alcuni sistemi database (come MySQL o Oracle), esiste un comando RENAME esplicito nel DDL. In SQL Server, la funzionalità di rinominare oggetti è spesso gestita tramite procedure di sistema come sp_rename.
Scopo: Cambiare il nome di una tabella, colonna, o altro oggetto.
Esempio (SQL Server – usando sp_rename):
SQL
EXEC sp_rename 'Dipendenti', 'Impiegati';
DDL in Contesto: DML e DCL
Come menzionato prima, il DDL è una delle tre principali categorie di comandi SQL:
- DDL (Data Definition Language): Per la struttura del database (es.
CREATE TABLE,ALTER TABLE,DROP TABLE). - DML (Data Manipulation Language): Per i dati all’interno della struttura (es.
SELECT,INSERT,UPDATE,DELETE). - DCL (Data Control Language): Per i permessi e il controllo degli accessi (es.
GRANT,REVOKE).
Comprendere il DDL è fondamentale per chiunque si occupi della progettazione, implementazione e manutenzione di un database, in quanto permette di modellare lo “scheletro” su cui poi si basano tutte le operazioni sui dati.
