Eliminare una riga o più

MySQL
di Risorse.net

Per eliminare una o più righe da una tabella MySQL, si utilizza il termine DELETE. La struttura, è identica alla proprietà SELECT, già analizzata nella puntata dedicata a SQL di base.

Eliminare una sola riga
La sintassi è:

DELETE nomeCampo FROM nomeTabella WHERE nomeCampo = 'valore' LIMIT 1;

Una buona abitudine da prendere quando si vuole eliminare un determinato numero di righe (anche una sola) è quella di usare la proprietà LIMIT. Per capire perché, vediamo l'esempio successivo:

DELETE nome FROM clienti WHERE nome = 'WebMilano.NET';

In questo caso, ammettiamo di voler eliminare una società dall'elenco dei clienti che si chiami WebMilano.NET. Se però ci fossero più campi "nome" con tale valore, la query precedente li eliminerebbe tutti, con il rischio di ritrovarsi con una tabella inutilizzabile. Per evitare ciò, è sempre bene aggiungere LIMIT 1, così, in caso di poca specificità della query, perderemmo comunque un solo valore:

DELETE nome FROM clienti WHERE nome = 'WebMilano.NET' LIMIT 1;

Se avessimo un campo di riferimento univico, ad esempio un "id" di tipo INT e AUTO_INCREMENT, potremmo fare:

DELETE nome FROM clienti WHERE id = n;

Dove "n" è il numero univoco che identifica la riga da eliminare.

Eliminare più righe
Per eliminare più righe da una tabella MySQL, la sintassi è uguale. Se sapessimo esattamente quante sono le righe da cancellare, potremmo comunque includere LIMIT:

DELETE nome FROM clienti WHERE citta = 'milano' LIMIT 10;

Se invece non sapessimo il numero di righe da eliminare ma volessimo comunque eliminare tutte quelle che rispondono alla clausola WHERE, potremmo fare:

DELETE nome FROM clienti WHERE citta = 'milano';

Eliminare tutti i records di una tabella
Si possono cancellare tutti i records da una singola tabella con una sola linea di codice:

DELETE * FROM clienti;

In questo caso, resta la struttura della tabella ma vengono rimossi i campi. Nel caso in cui avessimo però dei valori auto incrementali (spesso si usano per campi di nome "id" o simili) i nuovi campi terranno conto dei valori auto incrementali che sono stati rimossi.
Ad esempio, se avessimo avuto un campo "id" auto incrementale arrivato fino a 100, con la sintassi DELETE * FROM nomeTabella, i nuovi campi partiranno da 101.

Per evitare ciò, si utilizza il termine TRUNCATE, ad esempio:

TRUNCATE TABLE nomeTabella;

In questo modo, il contenuto della tabella sarà completamente svuotato e i campi auto incrementali ripartiranno da 1.

© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /mysql/eliminare_riga.asp?print=ok