Ik had vandaag de behoefte om alle tabellen in MySQL te verwijderen. De productieserver heeft geen phpMyAdmin, wat mijn favoriete tool is in mijn ontwikkelomgeving om MySQL databases te beheren. Dus ik zat vast aan de MySQL console, en had een makkelijke manier nodig om de klus te klaren.
Zoals ik altijd zeg “Google het”.
Ik vond een elegant script op SOW. In dit artikel zal ik regel voor regel beschrijven wat het doet.
SET FOREIGN_KEY_CHECKS = 0;
Deze regel schakelt de foreign key constraints uit. Als twee tabellen aan elkaar gekoppeld zijn, dan kun je geen van beide tabellen laten vallen. De foreign key constraint staat u dat niet toe.
SET GROUP_CONCAT_MAX_LEN=32768;
Deze regel stelt de maximale lengte van de CONCAT functie in. In de volgende regels van het script zult u een aaneenschakeling zien. In sommige MySQL configuraties kan deze waarde te laag zijn. Dus om mogelijke fouten te voorkomen, stellen we het groot genoeg in.
SET @tables = NULL;
Dit is de variabele waarin we de naam van de tabellen opslaan.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Bedenk dat al uw mysql schema’s zijn opgeslagen in de information_schema database. SELECT DATABASE() wordt gebruikt om de momenteel gebruikte database te bepalen. Deze regel selecteert de lijst van tabellen in de huidige database, en versiert ze met het (`) teken, en het eindresultaat zal worden opgeslagen in de tabellen variabele zoals dit, `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Deze regel zet “dummy” in tabellen variabele als de variabele NULL is. Deze regel zorgt ervoor dat tabellen variabele nooit NULL is.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Deze regel voegt “DROP TABLE IF EXISTS” toe voor je tabellen variabele. Dus het eindresultaat zal zijn DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Het is niet nodig om deze drie regels van elkaar te scheiden. Deze regels voeren de SQL zin uit in de tabellen variabele.
SET FOREIGN_KEY_CHECKS = 1;
Ten slotte deze regel schakelt de foreign key constraint check optie in.
Ik vond dit kleine script echt leuk. Het is echt handig. Ik hoop dat het je helpt om beter te begrijpen hoe het werkt.