2010-02-02 3 views
22

테이블에 DATETIME 열을 복제하고 새로운 이름을 지정해야합니다.신속하게 MySQL 테이블에 열 사본을 추가하십시오.

myResults라는 테이블에 myDate라는 열이 있는데 myDate 열과 완전히 동일한 데이터를 가진 newDate라는 테이블에 새 열을 만들려면 쿼리가 필요합니다.

새로운 컬럼을 만드는 명백한 2 단계 접근법을 수행 한 다음 모든 데이터를 복사하는 것보다 빠른 방법이 있습니까? (큰 테이블이고 가장 빠른 접근법을 찾고 있습니다)?

명백한 해결책은 :

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

답변

17

확실한 해결책은 불행히도, 유일한 솔루션입니다.

그러나 일반적으로 관계형 데이터베이스에서 열을 복사해서는 안됩니다.

+0

를 만들 수 있습니다 새로운 컬럼은 실제로 스크립트가 실행되고 그 컬럼의 데이터를 변경하기 전에 기본 데이터로 db를 프라임하는 것입니다. – Robbie

+5

스크립트는 원본 열에서 데이터를 읽고 한 번에 업데이트 할 수 없습니까? (데이터를 먼저 복사하지 않아도 됨). –

1

기본값이 필요한 경우 정적으로 기본값을 선택하거나 함수 호출을 사용할 수 있습니다.

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

또는

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

불행히도 기본값은 myDate의 값이어야합니다. – Robbie

+0

스크립트를 실행하려면? 스크립트가 이것들을 키잉하고 있다면, 과거의 뭔가를 정말로 멀리 만든다. DEFAULT '1800-01-01'.? – Matt

+0

글쎄, 스크립트는 일부 값만 변경합니다. unchaged는 myDate 여야합니다. 그것은 아주 좋은 스크립트는 아니지만 그것은 내가해야 할 일입니다. – Robbie

2

왜 당신의 작업은 이제까지 다른 컬럼 데이터를 복제하는 새로운 날짜 열을 요구할 것인가? 이것은 끔찍한 연습처럼 들리십니까? 당신이 달성하려는 것을 우리에게 말하는 것은 어떻습니까? 당신은 실제로 데이터 복제하지 않고, 몇 가지 다른 방법으로 같은 데이터를 두 번째 열을 뽑을 수 :

SELECT date1 AS date_old, date1 AS date_new FROM table; 

또는 -를, 당신 잘 보기

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

죄송합니다. 이것은 다른 답변의 설명에서 스크립트가 변경되도록 데이터를 정리하는 것이 었습니다. 나는 스크립트가 그것들을 변경시키지 않는 한, 실제로 그것들이 같은 가치가되기를 정말로 원하지 않는다. – Robbie

+0

"다른 답변에 대한 설명에서 스크립트가 변경 될 수있는 소수"라는 데이터가 아직까지는 명확하지 않습니다. –

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

하지만 새 열이 만들어지지 않습니다 ... –

관련 문제