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.
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.