Truncate (SQL)

Uit Wikipedia, de vrije encyclopedie

TRUNCATE is een opdracht in SQL waarmee de gegevens uit een tabel van een database worden gewist. Het effect van een TRUNCATE-opdracht komt overeen met dat van een DELETE-opdracht zonder WHERE-clausule, maar is fysiek niet hetzelfde.

Beschrijving[bewerken | brontekst bewerken]

De TRUNCATE-opdracht wordt gebruikt voor het legen van een database tabel en is geklassificeerd als een data definition language (DDL) opdracht. De opbouw en de exacte werking van de TRUNCATE-opdracht kan verschillend zijn per databasesysteem. Over het algemeen wordt de tabel verwijderd en opnieuw aangemaakt. Hierbij worden handelingen overgeslagen die bij een DELETE-opdracht wel worden uitgevoerd, zoals de ON DELETE trigger. Dit levert vooral bij grote tabellen tijdwinst op. Het zorgt er echter ook voor dat de TRUNCATE-opdracht niet altijd gebruikt kan worden, bijvoorbeeld bij tabellen met een verwijzende sleutel in MySQL.[1]

Opvallende verschillen tussen diverse databasesystemen:

  • Bij het gebruik van IDENTITY kolommen wordt de waarde van deze kolommen meestal teruggezet naar de beginwaarde (de SEED). In PostgreSQL kan ervoor gekozen worden om de bestaande waarde te behouden.[2]
  • In de meeste databases is het niet mogelijk om een TRUNCATE-opdracht terug te draaien (met ROLLBACK). Bij PostgreSQL en Microsoft SQL Server kan dit wel.[1][3]
  • Bij tabellen met een verwijzende sleutel kan meestal opgegeven worden of deze verwijzende tabellen ook geleegd moeten worden (met CASCADE).[2][3][4] Bij MySQL is dit echter niet mogelijk.[1]

Syntaxis[bewerken | brontekst bewerken]

In de simpelste vorm wordt de TRUNCATE-opdracht als volgt opgebouwd:

TRUNCATE TABLE tabelnaam

Bij sommige databasesystemen is TABLE optioneel. Ook kunnen bij sommige databasesystemen meerdere tabellen opgegeven worden, gescheiden door een komma.

Voorbeelden[bewerken | brontekst bewerken]

Voor het legen van de tabel 'bedrijven' kan de volgende opdracht worden gebruikt:

TRUNCATE TABLE bedrijven

Indien ook de tabel 'medewerkers' bestaat, met een verwijzende sleutel naar 'bedrijven', kunnen de volgende opdrachten worden gebruikt:

TRUNCATE TABLE medewerkers, bedrijven

Of wanneer CASCADE wordt ondersteund:

TRUNCATE TABLE bedrijven CASCADE

In dat geval wordt de tabel 'medewerkers' ook automatisch geleegd.

Zie ook[bewerken | brontekst bewerken]