MySQL is ‘ s werelds meest populaire open source-database, erkend voor zijn snelheid en betrouwbaarheid. Dit artikel bekijkt hoe je alle gegevens uit een MySQL database tabel kunt verwijderen en hoe het auto incrementele velden beïnvloedt.
verwijderen en afkappen
er zijn twee manieren om alle gegevens in een MySQL-databasetabel te verwijderen.
TRUNCATE TABLE tablename;
dit zal alle gegevens in de tabel zeer snel verwijderen. In MySQL wordt de tabel eigenlijk laten vallen en opnieuw gemaakt, vandaar de snelheid van de query. Het aantal verwijderde rijen voor MyISAM-tabellen geretourneerd is nul; voor INNODB retourneert het het werkelijke aantal verwijderd.
DELETE FROM tablename;
dit verwijdert ook alle gegevens in de tabel, maar is niet zo snel als het gebruik van de” TRUNCATE TABLE ” methode. In MySQL >= 4.0 wordt het aantal verwijderde rijen geretourneerd; in MySQL 3.23 is het aantal geretourneerd altijd nul.
automatische Increment kolommen voor MyISAM tabellen
Als u een automatische increment primaire sleutel kolom in uw MyISAM tabel zal het resultaat iets anders zijn, afhankelijk van welke delete methode u gebruikt. Bij gebruik van de methode” afkappen tabel ” zal de automatisch increment zaadwaarde teruggezet worden naar 1. Bij het gebruik van de” Delete FROM ” methode zal de automatische increment zaad worden gelaten zoals het voorheen was (bijvoorbeeld als de auto increment veld van de laatste ingevoegde record was 123 de volgende ingevoegde record zal worden ingesteld op 124).
merk op dat dit waar is voor MySQL >= 4.0; uit mijn lezing van de TRUNCATE manual page in MySQL 3.23 TRUNCATE werkt net als DELETE, wat zou betekenen dat het automatisch increment zaad niet wordt gereset. Ik heb momenteel geen 3.23 database opgezet om het te testen, dus kan dit niet bevestigen.
auto Increment Columns for InnoDB Tables
voor INNODB tables, of u nu de “TRUNCATE TABLE” of “DELETE FROM” methoden gebruikt, het auto increment veld zal niet worden gereset. Als u 5 records in een nieuwe tabel hebt ingevoegd, vervolgens alle records hebt verwijderd en een andere record hebt ingevoegd, heeft het veld een waarde van 6, ongeacht welke methode u hebt gebruikt.
Update 17 Feb 2009: Ik schreef dit bericht oorspronkelijk toen MySQL 4.0 de huidige versie was. Ik heb net Getest het bovenstaande nu op een InnoDB tabel met behulp van MySQL 5.0 en het gebruik van afkappen doet reset de auto increment veld terug naar de standaard. Dus ofwel het gedrag veranderd op een bepaald punt of ik was onjuist bij het maken van de bovenstaande verklaring.
weet u zeker dat u alle gegevens wilt verwijderen?
voordat u alle gegevens in een database verwijdert, moet u er zeker van zijn dat u echt alle gegevens wilt verwijderen. Het betaalt vaak eerst om” SELECT * FROM tablename “of” SELECT COUNT(*) FROM tablename ” voordat u dit doet om te controleren of het echt veilig is om alle gegevens te verwijderen. Misschien wil je echt iets doen als “DELETE FROM tablename WHERE foo = ‘bar'” in plaats daarvan.