844 Stimmen

Die Duplizierung einer MySQL-Tabelle, Indizes und Daten

Wie kann ich die Daten, Struktur und Indizes einer MySQL-Tabelle duplizieren oder kopieren, um eine neue Tabelle zu erstellen?

Das ist bisher meine Erkenntnis.

Dies wird die Daten und die Struktur kopieren, aber nicht die Indizes:

create table {new_table} select * from {old_table};

Dies wird die Struktur und Indizes kopieren, aber nicht die Daten:

create table {new_table} like {old_table};

4 Stimmen

0 Stimmen

Auch der Primärschlüssel wird nicht kopiert, daher müssen Sie die Tabelle ändern und ihn anschließend einstellen.

1828voto

Haim Evgi Punkte 119384

Um mit Indizes und Triggern zu kopieren, führe diese 2 Abfragen aus:

CREATE TABLE new_table LIKE old_table; 
INSERT INTO new_table SELECT * FROM old_table;

Um nur Struktur und Daten zu kopieren, verwende diese Abfrage:

CREATE TABLE new_table AS SELECT * FROM old_table;

Ich habe das schon einmal gefragt:

Kopiere eine MySQL-Tabelle einschließlich Indizes

20 Stimmen

Wichtig ist zu beachten, dass Fremdschlüssel, die auf oldtable verweisen, in newtable kopiert werden müssen (wenn Sie oldtable ersetzen).

4 Stimmen

Funktioniert das auch für große Tabellen (Millionen von Datensätzen)?.. Ich frage, weil ich nicht weiß, wie sich dieses select * in riesigen Tabellen verhält.

8 Stimmen

Um eine grobe Vorstellung zu geben, dauerte der Einfügevorgang auf einer Tabelle mit 16 Millionen Zeilen (mit 5 Indizes) auf einer AWS db.r3.large-Instanz 27 Minuten.

38voto

Krishneil Punkte 1332

MySQL Weg:

CREATE TABLE recipes_new LIKE production.recipes;
INSERT recipes_new SELECT * FROM production.recipes;

5 Stimmen

Dies sollte die akzeptierte Antwort gewesen sein. Da dies alle Indizes einschließlich Primärschlüssel und auto_increment kopiert.

1 Stimmen

Tatsächlich sollte dies die akzeptierte Antwort sein!

3voto

Alessandro Punkte 81

Der bessere Weg, um eine Tabelle zu duplizieren, besteht darin, nur die DDL-Anweisung zu verwenden. Auf diese Weise können Sie unabhängig von der Anzahl der Datensätze in der Tabelle die Duplizierung sofort durchführen.

Mein Ziel ist:

DROP TABLE IF EXISTS table_name_OLD;
CREATE TABLE table_name_NEW LIKE table_name;
RENAME TABLE table_name TO table_name_OLD;
RENAME TABLE table_name _NEW TO table_name;

Dies vermeidet die Verwendung der INSERT AS SELECT-Anweisung, die bei Tabellen mit vielen Datensätzen lange zur Ausführung benötigen kann.

Ich schlage außerdem vor, eine PLSQL-Prozedur wie im folgenden Beispiel zu erstellen:

DELIMITER //
CREATE PROCEDURE backup_table(tbl_name varchar(255))
BEGIN
  -- DROP TABLE IF EXISTS GLS_DEVICES_OLD;
  SET @query = concat('DROP TABLE IF EXISTS ',tbl_name,'_OLD');
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

  -- CREATE TABLE GLS_DEVICES_NEW LIKE GLS_DEVICES;
  SET @query = concat('CREATE TABLE ',tbl_name,'_NEW LIKE ',tbl_name);
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

  -- RENAME TABLE GLS_DEVICES TO GLS_DEVICES_OLD;
  SET @query = concat('RENAME TABLE ',tbl_name,' TO ',tbl_name,'_OLD');
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;  

  --  RENAME TABLE GLS_DEVICES_NEW TO GLS_DEVICES;
  SET @query = concat('RENAME TABLE ',tbl_name,'_NEW TO ',tbl_name);
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt; 
END//
DELIMITER ;

Einen schönen Tag noch! Alex

2voto

Abd Abughazaleh Punkte 2696

Um die Tabellenstruktur zu erstellen, verwenden Sie nur den folgenden Code:

CREATE TABLE new_table LIKE current_table; 

Um Daten von einer Tabelle in eine andere zu kopieren, verwenden Sie den folgenden Code:

INSERT INTO new_table SELECT * FROM current_table;

2voto

Bumi Ke Punkte 81

Um eine Tabelle und deren Struktur ohne Daten aus einer anderen Datenbank zu duplizieren, verwenden Sie dies. Geben Sie im neuen Datenbank-SQL-Typ ein

CREATE TABLE currentdatabase.tablename LIKE olddatabase.tablename

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X