2016-08-09 431 views
2

Ich möchte ein Skript erstellen, das nach Tabellen sucht, die einem Muster entsprechen, und diese dann abschneidet.Skript, das nach Tabellen sucht, die einem Muster entsprechen, und diese dann abschneidet.

Ich habe in mysql angemeldet und lief die folgenden, die die korrekten Tabellen gibt:

SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 

aber ich bin nicht sicher, wie dieses Skript in eine Shell einzubetten wie die SQL, die ausgeben würde, so:

TRUNCATE TABLE `weather`; 
TRUNCATE TABLE `weathermonth`; 
TRUNCATE TABLE `weathermonthlp`; 

und dann die Anweisungen ausführen.

Dank

+0

läuft Sie möchten die mysql-Ausgabe nicht in einem Shell-Skript analysieren. schreibe einfach eine gespeicherte Prozedur in mysql, um das select/trunking zu machen, dann benötigt dein Shell-Skript einfach 'mysql -u user -p pw -e' call your_function(); ' –

+0

Das Problem ist, dass wir keine einzelnen truncate schreiben wollen Anweisungen, ist es möglich, Select Concat zu verwenden, um die auszuführenden Anweisungen auszugeben und sie dann in einem sp auszuführen? – ranj1185

Antwort

1

auszuführen MySQL aus der Shell-Befehle können Sie Rohr in die Standardeingabe von mysql, zum Beispiel:

mysql << 'EOF' 
SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 
EOF 

nun Ihre MySQL-Befehle erzeugen weitere MySQL-Befehle ... Wenn Sie sie ausführen möchten, können Sie auch eine Pipeline an mysql, auch mit dem -s Flag, um nicht-Abfrage-Ausgabe von MySQL selbst in diesem Prozess wie folgt unterdrückt:

Beachten Sie, dass << 'EOF' ist ein hier-Dokument deren Inhalt wörtlich genommen, so dass Sie keine Sonderzeichen entkommen müssen in der MySQL-Befehle.

1

Sie können mit so etwas beginnen und bei Bedarf weiteren Code hinzufügen, z. B. den Datenbankparameter. Achten Sie auch darauf, Anführungszeichen zu verwenden, wenn Sie mit Leerzeichen suchen.

./truncate.sh „einige Suche mit Leerzeichen Wenn es sogar möglich, Platz in der Tabelle Namen zu haben“

#!/bin/bash 
searchpattern="$1" 

table_list=$(mysql -BN -e "SELECT CONCAT(TABLE_SCHEMA,'.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '$searchpattern%';") 
echo $table_list; 
IFS=" " 

while read i; do 

    echo "TRUNCATE TABLE $i;" 

done < <(echo $table_list) 

das Skript sollte eine Ausgabe der SQL, aber Sie müssen es, um zu überprüfen, bevor