J'essaye de déplacer d'anciennes données de:
this_table >> this_table_archive
copie de toutes les colonnes. J'ai essayé ceci, mais cela ne fonctionne pas:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Remarque: les tables sont identiques et ont été id
définies comme clé primaire.
mysql
select
insert-into
Kyle
la source
la source
Réponses:
La syntaxe correcte est décrite dans le manuel . Essaye ça:
Si les colonnes id sont une colonne à incrémentation automatique et que vous avez déjà des données dans les deux tables, vous pouvez dans certains cas vouloir omettre l'id de la liste des colonnes et générer de nouveaux identifiants à la place pour éviter d'insérer un identifiant qui existe déjà dans l'original table. Si votre table cible est vide, ce ne sera pas un problème.
la source
Pour la syntaxe, cela ressemble à ceci (laissez de côté la liste des colonnes pour signifier implicitement "tout")
Pour éviter les erreurs de clé primaire si vous avez déjà des données dans la table d'archivage
la source
Ajout à la réponse de Mark Byers:
Parfois, vous souhaitez également insérer des détails codés en dur, sinon il peut y avoir un échec de contrainte unique, etc.
Ici , la valeur de domaine est ajoutée par moi-même de manière codée en dur pour se débarrasser de la contrainte unique.
la source
n'avez-vous pas besoin de double () pour le bit de valeurs? sinon essayez ceci (bien qu'il doit y avoir un meilleur moyen
la source
INSERT INTO .. SELECT FROM
, nonINSERT INTO .. VALUES
. Caractéristique différente.Plus d'exemples et de détails
la source