Mein Provider installiert auf meiner Website Drupal CMS. Jetzt muss ich alle meine Daten von der alten Seite kopieren. Ich habe Tabellen ohne Präfixe in meiner alten DB, aber in der neuen DB haben alle Tabellen dp_[table_name]
Präfix.Wie kann ich Präfixe in allen Tabellen meiner MySQL DB ändern?
Antwort
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.
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
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.
bis die Datenbank weniger als ein paar Gigabyte ist ;-) – zerkms
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! –
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
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".
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
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
great Punkt die Bearbeitung über die' group_concat_max_len' Variable! Ich habe auch nicht den ganzen Satz bekommen, hat super geklappt! – AlexGH