2010-02-02 24 views
22

Necesito una forma rápida de duplicar una columna DATETIME en una tabla y darle un nuevo nombre.Agregue rápidamente una copia de una columna a una tabla MySQL

Tengo una columna llamada myDate en mi tabla llamada myResults, necesito una consulta para hacer una nueva columna en la tabla llamada newDate que tenga exactamente los mismos datos que la columna myDate.

¿Hay una manera más rápida de hacer esto que haciendo el método obvio de 2 pasos de hacer una nueva columna, y luego copiar todos los datos (es una tabla grande y estoy buscando el enfoque más rápido)?

solución obvia:

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

Respuesta

17

La solución obvia es la única solución, por desgracia.

Sin embargo, tenga en cuenta que, en general, no debe copiar una columna en bases de datos relacionales.

+0

Bueno la nueva columna es, en realidad, solo para preparar el archivo db con los datos predeterminados antes de que se ejecute un script y cambie los datos en esa columna. – Robbie

+5

¿No puede el script leer los datos de la columna fuente y los actualiza en una sola pasada? (Sin tener que copiar los datos primero). –

1

Si solo necesita un valor predeterminado allí, puede elegir cuál es el valor predeterminado estáticamente o usar una llamada a función.

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

o

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

Lamentablemente, el valor predeterminado debe ser el valor de myDate. – Robbie

+0

¿Para ejecutar la secuencia de comandos? Si la secuencia de comandos está marcando fuera de estos, entonces haga que el valor predeterminado sea muy lejano en el pasado. DEFAULT '1800-01-01'. – Matt

+0

Bueno, el script solo cambia algunos valores. Cualquier desbloqueado debe ser myDate. No es un guión muy bueno, pero es con lo que tengo que trabajar. – Robbie

2

¿Por qué su carga de trabajo cada vez exigir una columna de fecha y hora nueva, que duplica otro dato columnas? Esto suena como una práctica horrable? ¿Qué tal si nos dices qué intentas lograr? Puede tirar de una segunda columna con los mismos datos en varias formas diferentes, sin tener que duplicar los datos:

SELECT date1 AS date_old, date1 AS date_new FROM table; 

O bien, puede crear una vista

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

Lo siento, mencioné que esto era para los datos primarios de un guión para cambiar en los comentarios de las otras respuestas. En realidad, realmente nunca quiero que tengan el mismo valor a menos que el guión no los modifique. – Robbie

+0

"datos principales para que un script cambie en los comentarios de las otras respuestas", aún no es muy claro acerca de lo que está hablando. –

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

Pero eso no crea la nueva columna ... –

Cuestiones relacionadas