MySQL je světově nejpopulárnější open source databáze, uznávané pro svou rychlost a spolehlivost. Tento článek se zabývá tím, jak odstranit všechna data z databázové tabulky MySQL a jak to ovlivňuje automatické přírůstkové pole.
Odstranit a Zkrátit
Existují dva způsoby, jak odstranit všechna data v databázi MySQL tabulky.
TRUNCATE TABLE tablename;
tím se velmi rychle odstraní všechna data v tabulce. V MySQL je tabulka skutečně zrušena a znovu vytvořena, tedy rychlost dotazu. Počet odstraněných řádků pro vrácené tabulky MyISAM je nulový; pro INNODB vrací skutečné odstraněné číslo.
DELETE FROM tablename;
je To také vymaže všechna data v tabulce, ale není tak rychlý jako použití „TRUNCATE TABLE“ metoda. V MySQL > = 4.0 je vrácen počet odstraněných řádků; v MySQL 3.23 je vrácené číslo vždy nulové.
Auto Přírůstek Sloupce pro MyISAM Tabulky
Pokud máte auto increment primární klíč sloupec v MyISAM tabulka, výsledek bude mírně lišit v závislosti, které odstranit metodu použít. Při použití metody „zkrátit tabulku“ bude hodnota osiva automatického přírůstku resetována zpět na 1. Při použití metody „DELETE FROM“ bude semeno automatického přírůstku ponecháno tak, jak bylo dříve (např. pokud pole automatického přírůstku posledního vloženého záznamu bylo 123, další vložený záznam bude nastaven na 124).
Všimněte si, že je to pravda pro MySQL >= 4.0; z mého čtení ZKRÁTIT k obsluze strana v MySQL 3.23 ZKRÁTIT funguje stejně jako ODSTRANIT, což by znamenalo, že auto přírůstek semeno není reset. V současné době nemám databázi 3.23 nastavenou k testování, takže to nemohu potvrdit.
sloupce automatického přírůstku pro tabulky INNODB
pro tabulky INNODB, ať už používáte metody „zkrátit tabulku“ nebo „odstranit z“, pole automatického přírůstku nebude resetováno. Pokud jste vložili 5 záznamů do nové tabulky, poté odstranili všechny záznamy a vložili další záznam, pole by mělo hodnotu 6, bez ohledu na to, jakou metodu jste použili.
Update 17 Feb 2009: původně jsem napsal tento příspěvek, když MySQL 4.0 byla aktuální verze. Právě jsem testoval výše uvedené na InnoDB tabulce pomocí MySQL 5.0 a pomocí zkrácení resetuje pole automatického přírůstku zpět na výchozí. Takže buď se chování v určitém okamžiku změnilo, nebo jsem byl při výše uvedeném prohlášení nesprávný.
opravdu chcete smazat všechna data?
před odstraněním všech dat v databázi byste se měli ujistit, že máte v úmyslu všechna data smazat. Často se to vyplácí první „SELECT * FROM tablename“ nebo „SELECT COUNT(*) FROM tablename“ před tím zkontrolovat, že to opravdu je bezpečné smazat všechna data. Možná opravdu chcete udělat něco jako“ DELETE FROM tablename WHERE foo = ‚bar‘ “ místo toho.