DELETE en TRUNCATE zijn beide hulpmiddelen voor het opschonen van tabellen, maar werken op verschillende manieren:
Fijnere punten:
ROLLBACK), TRUNCATE niet of afhankelijk van DBMS.Voorbeeld:
-- Verwijder bestellingen ouder dan 3 jaar DELETE FROM orders WHERE created_at < CURRENT_DATE - INTERVAL '3 years'; -- Maak de tabel volledig leeg (snel) TRUNCATE TABLE logs;
Kun je gegevens herstellen na TRUNCATE?
Typische fout: men denkt dat TRUNCATE, net als DELETE, kan worden teruggedraaid in een transactie. Maar TRUNCATE kan meestal niet worden teruggedraaid of een UNDO worden gemaakt, behalve in sommige DBMS (bijvoorbeeld PostgreSQL bij werken binnen een transactie).
Voorbeeld (in de meeste DBMS):
BEGIN; TRUNCATE TABLE orders; ROLLBACK; -- In de meeste DBMS zal dit niet werken, gegevens zijn verloren!
Geschiedenis
Verwijderen van tijdelijke gegevens in de productie-database met TRUNCATE in plaats van TEST. De audit-trigger voor het verwijderen van rijen werkte alleen op DELETE — informatie over verloren gegevens, tijd en gebruiker ontbreekt. Dit heeft de incidentanalyse beïnvloed.
Geschiedenis
Het opschonen van een tabel met TRUNCATE terwijl er een externe sleutel aanwezig is. SQL genereerde een fout vanwege de referentiële integriteitsbeperking, het script voltooide niet, de automatisering stopte. Oplossing: tijdelijk externe sleutels verwijderen of DELETE gebruiken.
Geschiedenis
Massale gegevensverwijdering via DELETE in grote tabellen zonder batching: door lange vergrendelingen "hing" de database, andere transacties wachtten op het vrijgeven van vergrendelingen. Het resultaat — stilstand van het systeem. Correct: gebruik DELETE LIMIT/OFFSET, als ondersteund, of batches.