DELETE

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

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]
    [RETURNING espr_select [, espr_select ...]]

Oppure:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM nome_tabella[.*] [, nome_tabella[.*]] ...
    USING riferimenti_tabelle
    [WHERE condizioni_where]
    [RETURNING espr_select [, espr_select ...]]

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 |
+------+ 

Vedi anche

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.