2010-02-02 12 views
22

Ho bisogno di un metodo rapido per duplicare una colonna DATETIME in una tabella e dargli un nuovo nome.Aggiungere rapidamente una copia di una colonna a una tabella MySQL

Ho una colonna denominata myDate nella mia tabella denominata myResults, ho bisogno di una query per creare una nuova colonna nella tabella chiamata newDate che ha gli stessi dati della colonna myDate.

C'è un modo più veloce per farlo rispetto all'ovvio approccio in due passaggi di creare una nuova colonna e quindi copiare tutti i dati (è un grande tavolo e sto cercando l'approccio più veloce)?

soluzione più ovvia:

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

risposta

17

La soluzione più ovvia è l'unica soluzione, purtroppo.

Tuttavia, si noti che in generale non si deve copiare una colonna nei database relazionali.

+0

Bene la nuova colonna è in realtà solo per caricare il db con i dati predefiniti prima che uno script venga eseguito e cambia i dati in quella colonna. – Robbie

+5

Lo script non può leggere i dati dalla colonna di origine e aggiornarli in un solo passaggio? (Senza dover copiare prima i dati). –

1

Se è necessario solo un valore predefinito, è possibile scegliere quale valore predefinito è staticamente o utilizzare una chiamata di funzione.

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

o

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

Sfortunatamente il valore predefinito deve essere il valore di myDate. – Robbie

+0

Per l'esecuzione dello script? Se lo script sta effettuando il key-off di questi, allora fai qualcosa di predefinito molto lontano nel passato DEFAULT '1800-01-01'.? – Matt

+0

Bene, lo script cambia solo alcuni valori. Qualsiasi dato non registrato dovrebbe essere myDate. Non è uno script molto buono, ma è quello con cui devo lavorare. – Robbie

2

Perché sarebbe il carico di lavoro sempre chiedere una nuova colonna datetime, che duplica un altro dato colonne? Sembra una pratica ovvia? Che ne dici di dirci cosa stai cercando di ottenere? Si può tirare una seconda colonna con gli stessi dati in diversi modi, senza in realtà duplicare i dati:

SELECT date1 AS date_old, date1 AS date_new FROM table; 

Oppure, è possibile creare una vista

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

Mi dispiace, ho detto che questo era per i dati di primo livello per uno script da modificare nei commenti delle altre risposte. In realtà non voglio davvero che abbiano lo stesso valore a meno che lo script non li cambi. – Robbie

+0

"dati primari per uno script da modificare nei commenti delle altre risposte", ancora non molto chiaro su cosa stai parlando. –

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

Ma questo non crea la nuova colonna ... –

Problemi correlati