A mai napon az összes táblát törölni kellett a MySQL-ben. A termelő szerveren nincs phpMyAdmin, ami a kedvenc eszközöm a fejlesztési környezetemben a MySQL adatbázisok kezelésére. Így a MySQL konzollal voltam leragadva, és szükségem volt egy egyszerű módszerre a feladat elvégzésére.
Amint mindig mondom: “Google it”.
A SOW-n találtam egy elegáns szkriptet. Ebben a cikkben soronként leírom, hogy mit csinál.
SET FOREIGN_KEY_CHECKS = 0;
Ez a sor letiltja az idegenkulcs-kényszereket. Ha két tábla kapcsolódik egymáshoz, akkor egyik táblát sem lehet törölni. Az idegenkulcs-kényszer nem teszi ezt lehetővé.
SET GROUP_CONCAT_MAX_LEN=32768;
Ez a sor a CONCAT függvény maximális hosszát állítja be. A szkript következő soraiban egy konkatenációt fog látni. Egyes MySQL-konfigurációkban ez az érték túl alacsony lehet. Ezért az esetleges hibák elkerülése érdekében elég nagyra állítjuk.
SET @tables = NULL;
Ez az a változó, amelyben a táblák nevét tároljuk.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Ne feledjük, hogy az összes mysql sémát az information_schema adatbázisban tároljuk. A SELECT DATABASE() segítségével határozzuk meg az aktuálisan használt adatbázist. Ez a sor kiválasztja az aktuális adatbázisban lévő táblák listáját, és a (`) karakterrel díszíti őket, és a végeredményt a tables változóban fogja tárolni, így: `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Ez a sor “dummy”-t tesz a tables változóba, ha a változó NULL. Ez a sor biztosítja, hogy a tables változó soha ne legyen NULL.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Ez a sor hozzáadja a “DROP TABLE IF EXISTS” szót a tables változó elé. Így a végeredmény DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n` lesz.
Ezt a három sort nem szükséges elválasztani egymástól. Ezek a sorok végrehajtják az SQL mondatot a táblázatok változóban.
SET FOREIGN_KEY_CHECKS = 1;
Végül ez a sor engedélyezi az idegen kulcs megkötés ellenőrzési opciót.
Ez a kis szkript nagyon tetszett. Nagyon praktikus. Remélem, segít jobban megérteni a működését.