Limbajul SQL prezinta trei tipuri de operatii pentru manipularea datelor din tabele: inserare, modificare si stergere. Fiecarei operatii ii corespunde o instructiune SQL: INSERT, UPDATE si DELETE.
Instructiunea DELETE permite stergerea inregistrarilor din tabele. La utilizarea instructiunii DELETE trebuie avut in vedere faptul ca datele sterse nu mai pot fi recuperate. Totusi, din motive de viteza, datele nu sunt efectiv sterse din fisiere, locul ocupat de ele fiind alocat pentru adaugarea de noi inregistrari, prin operatii de tip INSERT.
Pentru instructiunea DELETE pot fi utilizate urmatoarele doua sintaxe (prima sintaxa se utilizeaza pentru stergerea inregistrarilor dintr-un singur tabel, iar cea de-a doua pentru stergerea inregistrarilor din mai multe tabele).
DELETE [LOW_PRIORITY] [IGNORE] FROM nume_tabel [WHERE conditie_stergere] [ORDER BY {nume_coloana | expresie | pozitie_coloana} [ASC | DESC], ...] [LIMIT numar_inregistrari]
DELETE [LOW_PRIORITY] [IGNORE] nume_tabel [, nume_tabel] ... FROM referinte_tabele [WHERE conditie_stergere]
Pentru a utiliza aceasta instructiune este necesar privilegiul DELETE pentru tabelul din care sunt sterse inregistrarile.
Clauzele corespunzatoare instructiunii DELETE au urmatoarele semnificatii. Clauza LOW_PRIORITY se utilizeaza pentru a intarzia stergerea efectiva a datelor din tabel, pana cand utilizatorii nu mai citesc date din tabel. Are acelasi efect ca si in cazul instructiunii INSERT.
Daca este utilizata clauza IGNORE, instructiunea nu este intrerupta daca apar erori in timpul procesului de stergere.
Clauza FROM specifica tabelul (tabelele) din care vor fi sterse inregistrarile
Clauza WHERE indica o conditie logica care stabileste inregistrarile care sunt sterse. Daca aceasta clauza lipseste, vor fi sterse toate inregistrarile din tabel. Din tabelul actor stergem inregistrarile pentru care last_name are valoarea OLDMAN.
mysql> DELETE -> FROM actor -> WHERE last_name = 'OLDMAN'; Query OK, 2 rows affected
Daca este prezenta clauza ORDER, inregistrarile sunt sterse in ordinea specificata. Clauza LIMIT stabileste o limita cu privire la numarul de inregistrari care pot fi sterse.
Clauzele ORDER si LIMIT pot interveni intr-o implementare care necesita stergerea ultimelor 5 inregistrari introduse la nivelul tabelului actor. In acest sens avem in vedere mai intai ordonarea descrescatoare a inregistrarilor de la nivelul tabelului actor dupa coloana last_update, apoi pastrarea in rezultat, in vedere stergerii, doar a primelor 5 inregistrari.
mysql> DELETE -> FROM actor -> ORDER by last_update DESC -> LIMIT 5; Query OK, 5 rows affected
Pentru a sterge inregistrari din mai multe tabele este necesara cea de-a doua sintaxa, caz in care nu pot fi utilizate clauzele ORDER BY si LIMIT. in acest caz, vor fi sterse doar inregistrarile corespunzatoare tabelelor precizate inaintea clauzei FROM.
Pentru clientii inactivi, customer.active = 0, avem in vedere stergerea platilor (payment) si a filmelor inchiriate (rental).
mysql> DELETE payment, rental -> FROM customer INNER JOIN payment USING(customer_id) -> INNER JOIN rental USING(customer_id) -> WHERE customer.active = 0; Query OK, 809 rows affected
Ultima instructiune DELETE utilizeaza toate cele trei tabele pentru cautarea inregistrarilor, dar permite stergerea doar a inregistrarilor din tabelele precizate inainte de clauza FROM. Aliasurile pot fi stabilite doar in clauza FROM.
mysql> DELETE p, r -> FROM customer c, payment p, rental r -> WHERE c.customer_id = p.customer_id AND -> c.customer_id = r.customer_id AND -> c.active = 0; Query OK, 809 rows affected