2009-11-20 5 views
50

timestamp 유형의 열이있는 표가 있으며 기본값은 current_timestamp이며 모든 업데이트마다 current_timestamp으로 업데이트됩니다.mysql 테이블의 열 기본값을 어떻게 변경합니까?

이 열의 "업데이트 중"기능을 제거하고 싶습니다. alter 문을 작성하려면 어떻게해야합니까?

ALTER TABLE mytable alter column time set DEFAULT now(); 

는하지만이 작동하지 않았다

나는 다음 시도했다.

+0

트리거를 사용하여 업데이트하지 않았습니까? –

+0

이 질문은 StackExcange로 마이그레이션해야합니다 : –

답변

75

피트 거의 정확했다 (탈출 및 필드 이름의 두 번째 사용 추가 수정 됨)하지만 '변화'에 대한 잘못된 구문을 사용 시도 열 이름을 반복해야합니다. 또한 작은 따옴표 대신 backticks를 사용하여 열 이름 시간을 이스케이프 처리하면 mysql 열 유형으로 해석되지 않습니다.

CURRENT_TIMESTAMP의 DEFAULT를 지정하면 MySQL이 더 이상 열을 자동으로 업데이트하지 않습니다. MySQL Manual에서 : 기본 CURRENT_TIMESTAMP 절

없이 UPDATE 절에서 컬럼은 기본 값에 대한 현재의 타임 스탬프를 가지고 있지만 자동으로 업데이트되지 않습니다.

9

AFAIK는 NOW()와 같은 함수를 기본값으로 사용할 수 없습니다.

ALTER TABLE mytable CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

주의 사항 :

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

+0

다음과 같이 나타납니다 : mysql> ALTER TABLE messages CHANGE time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ERROR 1064 (42000) : SQL 구문에 오류가 있습니다. 올바른 구문이 1 행에서 'NOT NULL DEFAULT CURRENT_TIMESTAMP'근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. mysql> ALTER TABLE messages CHANGE 컬럼 시간 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP; ERROR 1064 (42000) : SQL 구문에 오류가 있습니다. 올바른 구문이 1 행에서 'NOT NULL DEFAULT CURRENT_TIMESTAMP'근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. – Tihom

+0

죄송합니다. 이스케이프를 추가하는 것을 잊어 버렸습니다. 필드 이름이 두 번 나타납니다. – Pete

관련 문제