# Linguaggio di manipolazione dei dati

In informatica, un linguaggio di manipolazione dei dati (o DML, dall'inglese data manipulation language) è un tipo di linguaggio che consente di leggere, inserire, modificare o eliminare i dati in un database. Attualmente il linguaggio di manipolazione dati più utilizzato è l'SQL (Structured Query Language), che trova il suo maggiore campo di applicazione nel trattamento dei database relazionali. Altri linguaggi di tipo DML sono usati da DBMS non relazionali, come l'IMS/DL1 e l'IDMS.
I comandi DML all'inizio erano utilizzati solo all'interno di programmi scritti in altri linguaggi di programmazione, ma in seguito all'affermazione di SQL sono oggi usati anche dagli utenti finali. Essi esprimono azioni da effettuare sui dati identificate dalla parola iniziale dell'istruzione, che quasi sempre è un verbo. Nel caso di SQL, i verbi utilizzati sono SELECT per la ricerca, INSERT per l'inserimento, UPDATE per l'aggiornamento e DELETE per la cancellazione.
Le istruzioni DML dell'SQL sono state standardizzate dall'ANSI, ma molti produttori di DBMS forniscono estensioni proprietarie che garantiscono funzionalità aggiuntive.

## DML dell'SQL standard
### Insert

Il comando ha la funzione di inserire i dati nelle tabelle.
Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, è possibile indicare le sole colonne per le quali vengono passati dei valori, purché vengano inseriti comunque i valori per tutte le colonne not null (che non possono essere nulle) della tabella.
Di per sé il comando insert opera inserendo in tabella una sola riga per volta. È possibile, però, inserire più di una riga "in modo automatico" passando all'insert una serie di righe (o tuple) risultanti da un comando di select, purché tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati.

#### Sintassi del comando insert

* Insert semplice:
oppure
* Insert mediante select:

### Update

Il comando update ha la tripla funzione di modificare i dati delle tabelle.
Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo " = " (uguale) e dal nuovo valore che deve assumere.
È possibile modificare più campi della stessa riga in un unico comando update, separandoli l'uno dall'altro con il simbolo ", " (virgola).
Il comando generico aggiorna tutte le righe della tabella. È possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione qualitativa delle righe imponendo delle condizioni sui dati presenti nelle righe prima dell'aggiornamento.

#### Sintassi del comando update

* Update generico:
* Update con condizione:

### Delete

Il comando delete ha la funzione di cancellare i dati dalle tabelle.
Come il comando update anche delete può operare in modo generico cancellando tutte le righe della tabella oppure può identificare le righe da cancellare mediante la parola chiave aggiuntiva WHERE e la condizione (o le condizioni) ad essa associata.

#### Sintassi del comando delete

* Delete generico:
* Delete con condizione:

### Truncate Table

Come già detto, una Delete priva di clausola Where cancella tutte le righe dalla tabella specificata. Tuttavia, esiste un altro modo per svuotare completamente una tabella: il comando Truncate Table. Alcuni DBMS implementano questo comando (che non è presente nello standard SQL) in modo più veloce rispetto a una Delete, ad esempio cancellando il file dei dati senza leggerlo e ricreandolo vuoto. Generalmente però questo impedisce che vengano restituite alcune informazioni accessorie, come il numero di righe cancellate.

#### Sintassi del comando truncate table
### La transazione

Le istruzioni di DML Insert, Update, Replace e Delete, se poste all'interno di una transazione, non sono irreversibili e possono essere annullate nel caso ci si renda conto che non sono state applicate in modo corretto.
Una transazione è un blocco di istruzioni che sono strettamente correlate tra loro. Nel caso si verifichi un errore (sia esso nel programma oppure dovuto ad un problema esterno, per esempio se il sistema si blocca) non verrà annullata solo l'ultima istruzione, ma l'intera transazione. In tal modo si è certi che l'integrità dei dati verrà garantita.

#### Begin Transaction

Per iniziare esplicitamente una transazione si utilizza il comando BEGIN TRANSACTION. La mancanza di questo comando nei vari DBMS fa sì che ogni istruzione funga da transazione a sé stante.

##### Sintassi del comando begin transaction
#### Commit

Per confermare la transazione si utilizza il comando COMMIT. Con esso tutte le modifiche effettuate sui dati in precedenza vengono memorizzate.

##### Sintassi del comando commit
#### Rollback

Per annullare la transazione si utilizza il comando ROLLBACK. Con esso tutte le modifiche effettuate sui dati in precedenza (a partire dall'inizio della transazione) vengono cancellate.