DELETE
Sintassi
Sintassi a tabella singola:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM nome_tabella [WHERE condizione_where] [ORDER BY ...] [LIMIT num_righe] [RETURNING espr_select [, espr_select ...]]
Sintassi multi-tabella:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] nome_tabella[.*] [, nome_tabella[.*]] ... FROM riferimenti_tabelle [WHERE condizioni_where]
Oppure:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM nome_tabella[.*] [, nome_tabella[.*]] ... USING riferimenti_tabelle [WHERE condizioni_where]
Spiegazione
Con la sintassi a tabella singola, l'istruzione DELETE
elimina alcune righe da nome_tabella e restituisce il numero dei record eliminati. Questo numero può essere letto utilizzando la funzione ROW_COUNT(). La clausola WHERE
, se presente, specifica le condizioni che identificano le righe da cancellare. Se la WHERE
non è presente, vengono eliminati tutti i record. Se la clausola ORDER BY
è presente, le righe vengono eliminate nell'ordine specificato. La clausola LIMIT
pone un limite al numero di record da cancellare.
Se si usa la sintassi multi-tabella, DELETE
elimina da ogni nome_tabella
specificato quei record che corrispondono alle condizioni nella WHERE. In questo caso, ORDER BY
e LIMIT
non possono essere utilizzati.
condizione_where
è un'espressione che restituisce true per le righe che verranno eliminate. E' meglio descritta nella pagina SELECT.
Attualmente, non è possibile eliminare righe da una tabella e selezionare dati dalla tabella stessa tramite una subquery.
Per eliminare le righe da una tabella, è necessario avere il privilegio DELETE
sulla tabella stessa. Si necessita solo del privilegio SELECT
per le colonne che vengono soltanto lette, come quelle specificate nella clausola WHERE
. Si veda GRANT.
Come detto, un'istruzione DELETE
senza WHERE
elimina tutte le righe. Se non si necessita di conoscere il numero di record cancellati, esiste un modo più veloce per farlo: l'istruzione TRUNCATE TABLE
. Tuttavia, dentro una transazione o se si ha eseguito un lock sulla tabella, non è possibile utilizzare TRUNCATE TABLE
ma soltanto DELETE
. Si vedano TRUNCATE TABLE
e LOCK
.
MariaDB starting with 10.0.5
DELETE ... RETURNING è stato introdotto in MariaDB 10.0.5.
Da MariaDB 10.0.5, è possibile restituire un resultset delle righe cancellate usando la sintassi DELETE ... RETURNING espr_select [, espr_select ...]]
Esempi
DELETE FROM t RETURNING f1; +------+ | f1 | +------+ | 5 | | 50 | | 500 | +------+