Il DML permette di inserire, modificare ed eliminare i dati nelle tabelle. La struttura delle tabelle rimane invariata.

INSERT

-- Inserimento specificando esplicitamente le colonne (consigliato)
INSERT INTO Studenti (nome, cognome, email, data_nascita)
VALUES ('Mario', 'Rossi', '[email protected]', '2005-03-15');

-- Inserimento multiplo in una sola istruzione
INSERT INTO Corsi (nome_corso, crediti) VALUES
    ('Matematica', 6),
    ('Informatica', 8),
    ('Storia', 4);

-- Inserimento da una SELECT (copia dati da un'altra tabella)
INSERT INTO Archivio_Studenti (nome, cognome)
SELECT nome, cognome FROM Studenti WHERE voto_medio < 6.0;

UPDATE

-- Aggiornare un singolo campo per un record specifico
UPDATE Studenti
SET voto_medio = 8.5
WHERE id_studente = 1;

-- Aggiornare più campi contemporaneamente
UPDATE Studenti
SET nome = 'Marco', email = '[email protected]'
WHERE codice_fiscale = 'RSSMRC05C15F205Z';

-- Aggiornare basandosi sul valore attuale
UPDATE Studenti
SET voto_medio = voto_medio + 0.5
WHERE id_classe = 3;

-- ATTENZIONE: UPDATE senza WHERE aggiorna TUTTI i record della tabella!

DELETE

-- Eliminare record specifici
DELETE FROM Studenti WHERE id_studente = 5;

-- Eliminare più record con una condizione
DELETE FROM Iscrizioni WHERE data_iscrizione < '2020-01-01';

-- ATTENZIONE: DELETE senza WHERE svuota l'intera tabella!
-- Usare TRUNCATE TABLE per svuotare (più efficiente)

Transazioni

Una transazione è una sequenza di operazioni SQL che devono essere eseguite tutte o nessuna. Se una fallisce, si annullano tutte le precedenti (rollback).

START TRANSACTION;

UPDATE ContiCorrenti SET saldo = saldo - 500 WHERE id_conto = 1;
UPDATE ContiCorrenti SET saldo = saldo + 500 WHERE id_conto = 2;

-- Se entrambe le operazioni sono andate a buon fine:
COMMIT;

-- Se qualcosa è andato storto (es. conto inesistente):
ROLLBACK;

Proprietà ACID delle transazioni:

Riepilogo: DDL vs DML

DDL DML
Agisce su Struttura (schema) Dati (contenuto)
Comandi CREATE, ALTER, DROP, TRUNCATE INSERT, UPDATE, DELETE
Reversibile? No (in genere) Sì, con ROLLBACK in una transazione