Hur man släpper alla tabeller i MySQL

Jag behövde släppa alla tabeller i MySQL idag. Produktionsservern har inte phpMyAdmin, vilket är mitt favoritverktyg i min utvecklingsmiljö för att hantera MySQL-databaser. Så jag var fast med MySQL-konsolen och behövde ett enkelt sätt att göra jobbet.

Som jag alltid säger ”Google it”.

Jag hittade ett elegant skript på SOW. I den här artikeln kommer jag att beskriva vad det gör rad för rad.

Denna kod släpper alla tabeller i den för närvarande valda databasen
SET FOREIGN_KEY_CHECKS = 0;

Denna rad inaktiverar de främmande nyckelbegränsningarna. Om två tabeller är associerade med varandra kan du inte släppa någon av tabellerna. Det är inte möjligt att göra det med hjälp av begränsningen för utländska nycklar.

SET GROUP_CONCAT_MAX_LEN=32768;

Denna rad fastställer den maximala längden för CONCAT-funktionen. I de följande raderna i skriptet kommer du att se en sammanlänkning. I vissa MySQL-konfigurationer kan det här värdet vara för lågt. Så för att undvika eventuella fel ställer vi in det tillräckligt stort.

SET @tables = NULL;

Detta är variabeln där vi lagrar namn på tabellerna.

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

Håll dig i minnet att alla dina mysql-scheman lagras i databasen information_schema. SELECT DATABASE() används för att avgöra vilken databas som används för närvarande. Den här raden väljer listan över tabeller i den aktuella databasen och dekorerar dem med tecknet (`), och slutresultatet lagras i variabeln tables så här: `table_1`, `table_2`, …, `table_n`.

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

Den här raden placerar ”dummy” i variabeln tables om variabeln är NULL. Denna rad säkerställer att tables-variabeln aldrig är NULL.

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

Denna rad lägger till ”DROP TABLE IF EXISTS” före tables-variabeln. Slutresultatet blir alltså DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.

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

Det finns ingen anledning att separera dessa tre rader. Dessa rader utför SQL-satsen i variabeln tables.

SET FOREIGN_KEY_CHECKS = 1;

Finalt aktiverar den här raden alternativet för kontroll av Foreign Key Constraint.

Jag gillade verkligen det här lilla skriptet. Det är verkligen praktiskt. Jag hoppas att det hjälper dig att bättre förstå hur det fungerar.

Lämna ett svar

Din e-postadress kommer inte publiceras.