2010-02-02 10 views
22

Potrzebuję szybki sposób duplikowania kolumny DATETIME w tabeli i nadania jej nowej nazwy.Szybkie dodawanie kopii kolumny do tabeli MySQL

Mam kolumna o nazwie myDate w mojej tabeli o nazwie myResults, potrzebuję zapytania, aby utworzyć nową kolumnę w tabeli o nazwie newDate, która ma dokładnie takie same dane, jak kolumna myDate.

Czy jest to szybszy sposób niż wykonanie oczywistego dwuetapowego podejścia polegającego na utworzeniu nowej kolumny, a następnie skopiowaniu wszystkich danych (jest to duży stół i szukam najszybszego podejścia)?

oczywiste rozwiązanie:

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

Odpowiedz

17

Oczywistym rozwiązaniem jest jedynym rozwiązaniem, niestety.

Należy jednak zauważyć, że generalnie nie powinieneś kopiować kolumny w relacyjnych bazach danych.

+0

Dobrze nowa kolumna jest właśnie tak, aby przygotować bazę danych z domyślnymi danymi, zanim skrypt przejdzie i zmieni dane w tej kolumnie. – Robbie

+5

Czy skrypt nie odczytuje danych z kolumny źródłowej i aktualizuje go w tylko jednym przejściu? (Bez konieczności wcześniejszego kopiowania danych). –

1

Jeśli po prostu potrzebujesz tam wartości domyślnej, możesz wybrać domyślne ustawienie statyczne lub użyć wywołania funkcji.

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

lub

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

Niestety wartością domyślną musi być wartość myDate. – Robbie

+0

Aby uruchomić skrypt? Jeśli skrypt jest wyłączony z nich, ustaw domyślnie coś znacznie w przeszłości DEFAULT '1800-01-01'.? – Matt

+0

Cóż, skrypt zmienia tylko niektóre wartości. Wszelkie niezarządzane powinny być myDate. To nie jest bardzo dobry scenariusz, ale właśnie z nim muszę pracować. – Robbie

2

Dlaczego swoją pracą kiedykolwiek żądać nową kolumnę datetime, że powiela kolejne dane kolumn? To brzmi jak przerażająca praktyka? A może powiesz nam, co chcesz osiągnąć? Można wyciągnąć drugą kolumnę z tych samych danych w kilku różnych sposobów, bez faktycznie powielenie danych:

SELECT date1 AS date_old, date1 AS date_new FROM table; 

-albo-, można utworzyć widok

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

Przepraszam, wspominałem, że chodziło o przygotowanie danych dla skryptu, który ma ulec zmianie w komentarzach innych odpowiedzi. Właściwie tak naprawdę nie chcę, aby były one tej samej wartości, chyba że skrypt ich nie zmieni. – Robbie

+0

"najlepsze dane do zmiany skryptu w komentarzach innych odpowiedzi", wciąż niezbyt jasne, o czym mówisz. –

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

Ale to nie tworzy nowej kolumny ... –

Powiązane problemy