Jak zrušit všechny tabulky v MySQL

Dnes jsem potřeboval zrušit všechny tabulky v MySQL. Produkční server nemá phpMyAdmin, což je můj oblíbený nástroj ve vývojovém prostředí pro správu databází MySQL. Byl jsem tedy odkázán na konzoli MySQL a potřeboval jsem nějaký jednoduchý způsob, jak tuto práci provést.

Jak vždycky říkám: „Vygoogluj si to.“

Našel jsem elegantní skript na SOW. V tomto článku popíšu, co dělá řádek po řádku.

Tento kód zruší všechny tabulky v aktuálně vybrané databázi
SET FOREIGN_KEY_CHECKS = 0;

Tento řádek zakáže omezení cizích klíčů. Pokud jsou k sobě přiřazeny dvě tabulky, nelze žádnou z nich zrušit. Omezení cizího klíče vám to neumožní.

SET GROUP_CONCAT_MAX_LEN=32768;

Tento řádek nastavuje maximální délku funkce CONCAT. V následujících řádcích skriptu se zobrazí zřetězení. V některých konfiguracích MySQL může být tato hodnota příliš nízká. Abychom se tedy vyhnuli případným chybám, nastavíme ji dostatečně velkou.

SET @tables = NULL;

Toto je proměnná, do které ukládáme názvy tabulek.

SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());

Pamatujte, že všechna schémata mysql jsou uložena v databázi information_schema. SELECT DATABASE() slouží k určení aktuálně používané databáze. Tento řádek vybere seznam tabulek v aktuální databázi a ozdobí je znakem (`) a konečný výsledek bude uložen v proměnné tables takto: `table_1`, `table_2`, …, `table_n`.

SELECT IFNULL(@tables,'dummy') INTO @tables;

Tento řádek vloží do proměnné tables „dummy“, pokud je proměnná NULL. Tento řádek zajistí, že proměnná tables nebude nikdy NULL.

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);

Tento řádek přidá před proměnnou tables „DROP TABLE IF EXISTS“. Takže konečný výsledek bude DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.

PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Tyto tři řádky není třeba oddělovat. Tyto řádky provedou větu SQL v proměnné tables.

SET FOREIGN_KEY_CHECKS = 1;

Nakonec tento řádek povolí možnost kontroly omezení cizího klíče.

Tento malý skript se mi opravdu líbil. Je opravdu šikovný. Doufám, že vám pomůže lépe pochopit, jak to funguje.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.