Ich versuche, alte Daten zu verschieben von:
this_table >> this_table_archive
Kopieren aller Spalten. Ich habe es versucht, aber es funktioniert nicht:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Hinweis: Die Tabellen sind identisch und wurden id
als Primärschlüssel festgelegt.
mysql
select
insert-into
Kyle
quelle
quelle
Antworten:
Die korrekte Syntax ist im Handbuch beschrieben . Versuche dies:
Wenn es sich bei den ID-Spalten um eine Spalte mit automatischer Inkrementierung handelt und Sie bereits einige Daten in beiden Tabellen haben, möchten Sie in einigen Fällen möglicherweise die ID aus der Spaltenliste weglassen und stattdessen neue IDs generieren, um zu vermeiden, dass eine ID eingefügt wird, die bereits im Original vorhanden ist Tabelle. Wenn Ihre Zieltabelle leer ist, ist dies kein Problem.
quelle
Für die Syntax sieht es so aus (lassen Sie die Spaltenliste weg, um implizit "alle" zu bedeuten)
Zur Vermeidung von Primärschlüsselfehlern, wenn Sie bereits Daten in der Archivtabelle haben
quelle
Ergänzung zu Mark Byers Antwort:
Manchmal möchten Sie auch fest codierte Details einfügen, da sonst möglicherweise ein eindeutiger Einschränkungsfehler usw. auftritt. Verwenden Sie daher in solchen Situationen, in denen Sie einige Werte der Spalten überschreiben, Folgendes.
Hier wird der Domain- Wert von mir auf fest codierte Weise hinzugefügt, um die eindeutige Einschränkung zu beseitigen.
quelle
Benötigen Sie nicht double () für das Wertebit? Wenn nicht, versuchen Sie dies (obwohl es einen besseren Weg geben muss
quelle
INSERT INTO .. SELECT FROM
nichtINSERT INTO .. VALUES
. Andere Funktion.Weitere Beispiele & Details
quelle