Spieghiamo cosa sono i vincoli di integrità in MYSQL.
Dopo aver creato delle tabelle (ovvero delle entità) tramite PhpMyAdmin, si possono stabilire le relazioni tra le tabelle se ce ne sono.
Per farlo andare nel pannello di controllo di PhpMyAdmin e scegliere il button Struttura, poi cliccare su Vista Relazioni. Qui è possibile specificare delle azioni quando vengono modificate o eliminate delle righe nelle tabelle collegate.
Ovvero si stabiliscono delle clausole di vincolo sull’integrità referenziale, spesso utilizzate con chiavi esterne.
Ecco alcuni vincoli di integrità in MYSQL più comuni e studiamo il loro impatto sulle operazioni di modifica o eliminazione:
ON DELETE:
- RESTRICT: Impedisce l’eliminazione della riga padre se ci sono righe figlio collegate ad essa tramite la chiave esterna. Se si tenta di eliminare la riga padre, verrà generato un errore.
- CASCADE: Quando viene eliminata una riga padre, questa clausola eliminerà automaticamente tutte le righe figlio collegate tramite la chiave esterna.
- SET NULL: Imposta automaticamente i valori della colonna figlio collegata a NULL quando viene eliminata la riga padre.
ON UPDATE:
- RESTRICT: Impedisce l’aggiornamento del valore della chiave esterna nella riga padre se ci sono righe figlio collegate ad essa.
- CASCADE: Quando viene modificato il valore della chiave esterna nella riga padre, questa clausola aggiorna automaticamente i valori corrispondenti nelle righe figlio.
Queste clausole vengono utilizzate per garantire l’integrità referenziale tra le tabelle.
Ad esempio, se si ha una tabella “genitore” con una chiave esterna in una tabella “figlia”, l’uso di ON DELETE CASCADE può essere utile se si vuole eliminare automaticamente tutti i record “figli” quando viene eliminato un record “genitore”.
Vediamo come rappresentare il vincolo di integrità tramite codice SQL:
CREATE TABLE genitori (
id INT PRIMARY KEY
);
CREATE TABLE figli (
id INT PRIMARY KEY,
genitore_id INT,
FOREIGN KEY (genitore_id) REFERENCES genitori(id) ON DELETE CASCADE
);
In questo modo, quando un record nella tabella “genitori” viene eliminato, tutti i record corrispondenti nella tabella “figli” con il campo genitore_id corrispondente verranno eliminati automaticamente grazie alla clausola ON DELETE CASCADE.