Tutti i comandi SQL essenziali in un colpo d'occhio
SQL è composto da 5 sotto-linguaggi, ognuno con un ruolo preciso:
CREATE · ALTERDROP · TRUNCATERENAME
INSERT · UPDATEDELETE
GRANTREVOKECREATE ROLE
COMMITROLLBACKSAVEPOINT
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT N
"DDL Costruisce, DML Modifica, DCL Protegge, TCL Conferma, QL interroga"
Definiscono e modificano la struttura del database .
CREATECREATE TABLE Studenti ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(50) NOT NULL, eta INT CHECK (eta > 0), classe VARCHAR(10) DEFAULT '1A' );
ALTER-- Aggiungere colonna ALTER TABLE Studenti ADD email VARCHAR(100); -- Rinominare colonna ALTER TABLE Studenti RENAME COLUMN nome TO nome_completo; -- Modificare colonna ALTER TABLE Studenti MODIFY nome VARCHAR(80); -- Aggiungere vincolo (es. FK) ALTER TABLE Esami ADD CONSTRAINT fk_studente FOREIGN KEY (studente_id) REFERENCES Studenti(id); -- Eliminare colonna ALTER TABLE Studenti DROP COLUMN email;
DROPDROP TABLE Studenti; -- Elimina solo se esiste DROP TABLE IF EXISTS Studenti;
TRUNCATETRUNCATE TABLE Studenti; -- Più veloce di DELETE senza WHERE -- Resetta AUTO_INCREMENT
RENAMERENAME TABLE Studenti TO Alunni; -- Alternativa ALTER TABLE Studenti RENAME TO Alunni;
Create · Alter · Drop → "CAD la struttura del DB"
Truncate = "taglia tutto" · RENAME = "rinomina"
Manipolano i dati contenuti nelle tabelle.
INSERTINSERT INTO Studenti (nome, eta) VALUES ('Mario', 20); -- Più righe INSERT INTO Studenti (nome, eta) VALUES ('Luca', 19), ('Anna', 21);
UPDATEUPDATE Studenti SET eta = 21, classe = '3B' WHERE nome = 'Mario'; ⚠️ SENZA WHERE modifica TUTTE le righe!
DELETEDELETE FROM Studenti WHERE eta < 18; ⚠️ SENZA WHERE cancella TUTTE le righe!
INSERT | UPDATE | DELETE
Ricorda: IUD = INSERT, UPDATE, DELETE
Gestiscono i permessi di accesso ai dati.
GRANT-- Permessi su tabella specifica GRANT SELECT, INSERT ON db_scuola.Studenti TO 'utente1'@'localhost'; -- Più tabelle, permessi diversi GRANT SELECT ON db_scuola.Esami TO 'utente1'@'localhost'; GRANT UPDATE ON db_scuola.Studenti TO 'utente1'@'localhost'; -- Tutti i permessi su tutto il database GRANT ALL PRIVILEGES ON db_scuola.* TO 'admin'@'%';
REVOKE-- Rimuovi da tabella specifica REVOKE INSERT ON db_scuola.Studenti FROM 'utente1'@'localhost'; -- Rimuovi da più tabelle REVOKE SELECT ON db_scuola.Esami FROM 'utente1'@'localhost'; -- Rimuovi tutto REVOKE ALL PRIVILEGES ON db_scuola.* FROM 'utente1'@'localhost';
CREATE / DROP ROLE-- Creare un ruolo CREATE ROLE 'lettore'; CREATE ROLE 'editor'; -- Assegnare permessi al ruolo GRANT SELECT ON db_scuola.* TO 'lettore'; GRANT SELECT, INSERT, UPDATE ON db_scuola.Studenti TO 'editor'; -- Assegnare ruolo a un utente GRANT 'lettore' TO 'utente1'@'localhost'; -- Attivare il ruolo SET DEFAULT ROLE 'lettore' TO 'utente1'@'localhost'; -- Eliminare un ruolo DROP ROLE 'lettore';
Grant = Dai | Revoke = Togli | Role = Gruppo permessi
"GRant & Revoke = i Guardiani dei Ruoli"
Gestiscono le transazioni (gruppi di operazioni atomiche).
COMMITSTART TRANSACTION; UPDATE Conti SET saldo = saldo - 100 WHERE id = 1; UPDATE Conti SET saldo = saldo + 100 WHERE id = 2; COMMIT;
ROLLBACKSTART TRANSACTION; DELETE FROM Studenti WHERE id = 5; -- Ops! Errore! ROLLBACK; -- La riga è ancora lì ✓
SAVEPOINTSTART TRANSACTION; INSERT INTO Ordini VALUES (1, 'A'); SAVEPOINT sp1; INSERT INTO Ordini VALUES (2, 'B'); ROLLBACK TO sp1; -- annulla solo il 2° COMMIT;
Commit = Conferma | Rollback = Annulla | Savepoint = Segnalibro
"CRS: Conferma, Ripristina, Segna"
| Vincolo | Significato |
|---|---|
PRIMARY KEY | Identifica univocamente ogni riga (NOT NULL + UNIQUE) |
FOREIGN KEY | Collega a una PRIMARY KEY di un'altra tabella |
NOT NULL | Il campo non può essere vuoto |
UNIQUE | Tutti i valori devono essere diversi |
CHECK (cond) | Valore deve soddisfare la condizione |
DEFAULT val | Valore predefinito se omesso |
AUTO_INCREMENT | Incrementa automaticamente (MySQL) |
Come aggiungere una chiave esterna: durante la creazione o dopo.
Durante CREATE TABLECREATE TABLE Esami ( id INT PRIMARY KEY, voto INT, studente_id INT, ─── FK inline (colonna) ─── FOREIGN KEY (studente_id) REFERENCES Studenti(id) ON DELETE CASCADE ON UPDATE CASCADE );
Dopo con ALTER TABLEALTER TABLE Esami ADD CONSTRAINT fk_studente FOREIGN KEY (studente_id) REFERENCES Studenti(id) ON DELETE CASCADE ON UPDATE CASCADE;
Accanto ad ON DELETE ed ON UPDATE ci possono essere una tra le seguenti 4 azioni: CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION
| Azione | Cosa fa (quando elimino/aggiorno valori entità padre) |
|---|---|
CASCADE | Elimina/aggiorna automaticamente le righe figlie |
SET NULL | Imposta la FK a NULL nelle righe figlie |
SET DEFAULT | Imposta la FK al valore DEFAULT |
RESTRICT | Blocca l'operazione se ci sono righe figlie |
NO ACTION | Simile a RESTRICT (comportamento di default) |
1. La colonna figlia (studente_id) deve essere dello stesso tipo della PK padre (id)
2. La tabella padre (Studenti) deve essere creata PRIMA della figlia (Esami)
3. CASCADE = propagazione automatica · RESTRICT = blocco