2010-03-17 7 views

Antwort

26

zerkms Lösung hat nicht für mich funktioniert. Ich musste die information_schema Datenbank spezifizieren, um die Tables Tabelle abfragen zu können.

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q 
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test'; 

Edit:

die Abfrage nur Anruf RENAME TABLE einmal optimiert. Etwas, auf das ich stieß, war die Tatsache, dass die verkettete Ausgabe bei 341 Zeichen abgeschnitten wurde. Dies kann (falls erlaubt von Ihrem Server) gelöst werden, indem die MySQL Variable group_concat_max_len auf einen höheren Wert einstellen:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

Richtig, das funktionierte für mich, seit ich an localhost XAMPP mit Joomla gearbeitet habe und ich wollte zum automatischen Joomla-Präfix wechseln. Ich folge deinen Schritten - ich musste die 'information_schema'.Tabellen' wie du getan haben und setze SET group_concat_max_len = 10240; in meinem Fall, da es viele Tische gab. +1 – MJoraid

+1

Noch ein Punkt, Sie können den gleichen Befehl verwenden, um Tabelle über Datenbanken (sagen backup_db) wie: 'SELECT CONCAT ('RENAME TABLE', TABLE_NAME, 'TO backup_db.', TABLE_NAME, ';') VON INFORMATION_SCHEMA. TABLES WHERE table_schema = 'testbot'; ' – sactiw

+0

great Punkt die Bearbeitung über die' group_concat_max_len' Variable! Ich habe auch nicht den ganzen Satz bekommen, hat super geklappt! – AlexGH

21

Schreiben Sie ein Skript, das RENAME TABLE für jede Tabelle ausführt.

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

wo „test“ Datenbankname kann

danach wird erwartet, dass Sie lange Abfrage, die Präfixe hinzufügen, wenn Sie es

3

ausführen ;-) können Sie einfach die Datenbank sichern, öffnen Sie die Dump Ersetzen Sie mit einem Texteditor alle Vorkommen von "CREATE TABLE" durch "CREATE TABLE dp_" und stellen Sie die Datenbank wieder her. Es dauert ein paar Minuten zu tun.

+2

bis die Datenbank weniger als ein paar Gigabyte ist ;-) – zerkms

+0

Ich bin Spiel. :) Verwenden Sie für Datenbanken, die größer als GB sind, ein Abfragetool (z. B. SQL Workbench), wählen Sie alle Tabellen in der Tabellenliste aus, kopieren Sie den Inhalt in Spalte A einer Kalkulationstabelle (in meinem Fall Calc) und fügen Sie Folgendes ein Formel in Spalte B: = "Tabelle umbenennen" & A1 & "nach dp_" & A1 & "; "Füge die Formel aus Zelle B1 in jede andere B-Spalte ein und das Umbenennungsskript erscheint in Spalte B! –

+0

wie ich in meiner Antwort gesagt habe - Eine geeignete Methode zum Umbenennen ist die Verwendung von RENAME TABLE (+ information_shema zum Abrufen von Tabellennamen) – zerkms

10

PhpMyAdmin können Sie dies jetzt tun. Wählen Sie auf der Ebene "Datenbank" die Registerkarte "Struktur", um alle Tabellen anzuzeigen. Klicken Sie auf "Alle überprüfen" (unter der Tabelle). Wählen Sie im Dropdown-Menü "Mit ausgewählt": "Tischpräfix ersetzen".