2011-01-05 22 views
0

Ich habe zwei Tabellen mit der gleichen Struktur, und beide enthalten ein ID-Feld von auto_increment. Ich möchte eine Zeile von einem Tisch zum anderen bewegen.Verschieben von Zeilen zwischen MySQL-Tabellen

Ich weiß, dass ich verwenden kann:

INSERT INTO `new_table` VALUES (SELECT * FROM `old_table`) 

Aber auf diese Weise die ID in new_table wird die ID old_table erhalten. Also würde ich im Grunde alle Felder außer der ID kopieren wollen, die den auto_increment Wert new_table erhalten muss. Wie kann ich das machen?

Danke!

Joel


EDIT:

Sorry, ich sollte in meinem ursprünglichen Beitrag erwähnt haben - ich würde eine Art, wie es zu tun, ohne jedes Feld speziell die Auswahl, vor allem da ich ein Viele Felder ... Ich suche nach einem allgemeineren Ansatz.

Danke!

+0

wow! 4 exakt die gleichen Antworten in einer Minute! sei glücklich. :) – Nishant

+0

hehe, es war mein schlechtes, ich hätte erwähnen sollen, dass ich nach einem generischen Ansatz in meinem ursprünglichen Beitrag suche ... Ich habe es jetzt bearbeitet – Joel

Antwort

3
INSERT INTO `new_table` (name, surname, email) 
    (SELECT name, email, surname FROM `old_table`); 

Seien Sie vorsichtig, wenn der MySQL automatisch neue IDs für den Fall zuweisen zu lassen gibt es Beziehungen aus anderen Tabellen Sie müssen auch bewegen.

In solchen Fällen werde ich die gesamten Daten verschieben, indem Sie der ID einen bekannten Offset hinzufügen, der groß genug ist, um ID-Kollisionen in der Zieltabelle zu vermeiden. Da der Offset bekannt ist, kann ich denselben Offset anwenden, wenn ich Beziehungen (zur Zieltabelle) von anderen Tabellen verschiebe.

Edit basierend auf Frage bearbeiten: Ich schlage vor, "den generischen Ansatz" zu vermeiden. Es mag pedantisch erscheinen, alle Felder zu schreiben, aber es ist die einzige Möglichkeit, Fehler zu vermeiden und natürlich das ID-Kollisionsproblem. Wenn Sie vermeiden möchten, die Feldnamen einzugeben (da es langweilig und fehleranfällig ist), können Sie die Feldnamen aus show create table new_table kopieren.

+0

Danke, wahrscheinlich besser, es auf deine Art zu machen! – Joel

1

Nicht-ID in diesem Fall wählen:

INSERT INTO `new_table` (`field2`, `field3`) VALUES (SELECT `field2`, `field3` FROM `old_table`) 
0
INSERT INTO `new_table` (COLS-I-WANT) 
VALUES (SELECT (OLD-COLS-I-WANT) FROM `old_table`) 

Hoffnung, das hilft.

0

Spezifizieren Sie die Spaltennamen sowohl in der INSERT-Liste als auch in der SELECT-Liste mit Ausnahme der ID-Spalte

Verwandte Themen