2010-02-02 4 views
22

J'ai besoin d'une méthode rapide pour dupliquer une colonne DATETIME dans une table et lui donner un nouveau nom.Ajouter rapidement une copie d'une colonne à une table MySQL

J'ai une colonne nommée myDate dans ma table appelée myResults, j'ai besoin d'une requête pour créer une nouvelle colonne dans la table appelée newDate qui a exactement les mêmes données que la colonne myDate.

Existe-t-il un moyen plus rapide de faire cela qu'en faisant l'approche en deux étapes évidentes de faire une nouvelle colonne, puis en copiant toutes les données (c'est une grande table et l'approche la plus rapide)?

solution Obvious:

ALTER TABLE `myResults` ADD `newDate` DATETIME; 
UPDATE `myResults` SET `newDate` = `myDate`; 

Répondre

17

La solution évidente est la seule solution, malheureusement.

Notez toutefois qu'en général, vous ne devez pas copier une colonne dans des bases de données relationnelles.

+0

bien La nouvelle colonne est en fait juste pour amorcer la base de données avec les données par défaut avant qu'un script ne passe à travers et modifie les données dans cette colonne. – Robbie

+5

Le script ne peut-il pas lire les données de la colonne source et les mettre à jour en un seul passage? (Sans avoir à copier les données d'abord). –

1

Si vous avez juste besoin d'une valeur par défaut, vous pouvez choisir ce qui est statiquement par défaut ou utiliser un appel de fonction.

ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT '2010-01-01'; 

ou

ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT current_timestamp; 
+0

Malheureusement, la valeur par défaut doit être la valeur de myDate. – Robbie

+0

Pour que le script s'exécute? Si le script est en train de s'en séparer, alors faites quelque chose de vraiment loin par défaut dans le passé DEFAULT '1800-01-01'. – Matt

+0

Eh bien, le script ne change que certaines valeurs. Tout décacheté devrait être myDate. Ce n'est pas un très bon script mais c'est ce que je dois travailler. – Robbie

2

Pourquoi votre charge de travail toujours demander une nouvelle colonne datetime, qui fait double emploi avec d'autres données de colonnes? Cela ressemble à une pratique horrible? Pourquoi ne pas nous dire ce que vous essayez d'accomplir? Vous pouvez tirer une deuxième colonne avec les mêmes données dans quelques différentes façons, sans dupliquer les données réellement:

SELECT date1 AS date_old, date1 AS date_new FROM table; 

-ou-, vous pouvez créer une vue

CREATE VIEW virtual_table AS 
    SELECT date1 AS date_old, date1 AS date_new FROM table 
; 
SELECT * FROM virtual_table; 
+0

Désolé, j'ai mentionné qu'il s'agissait de données de base pour un script à modifier dans les commentaires des autres réponses. En fait, je ne veux pas vraiment qu'ils aient la même valeur à moins que le script ne les change pas. – Robbie

+0

"données principales pour un script à modifier dans les commentaires des autres réponses", toujours pas très clair sur ce dont vous parlez. –

9
UPDATE `table_name` SET `new_column` = `existing_column` WHERE `id`=`id` 
+5

Mais cela ne crée pas la nouvelle colonne ... –

Questions connexes