2010-04-20 4 views
2

나는 pollOfTheWeek라는 mysql 테이블을 가지고있다. 그것은 날짜 형식의 "pollDate"열을 가지고 있습니다. 나는 이것에 관한 두 가지 질문이있다 : 1. [pollDate date]와 같이 테이블을 생성하는 동안 열을 선언했다. 사용자가이 열에 값을 입력하지 않으면이 열이 자동으로 설정된다. 어떻게이 컬럼을 선언 할 수 있습니까?mysql 테이블에 날짜를 삽입하는 방법

  1. 위와 같은 선언이 있다고 가정 할 때 빈 값을 어떻게 입력합니까? 열의 유형이 varchar 인 경우 ""로 빈 값을 입력합니다. 하지만 형식 날짜이기 때문에 값을 ""로 입력하면 오류가 발생합니다. pollDate 열에 빈 값을 입력하려면 어떻게합니까?

답변

1

MySQL의 기본값은 극히 제한적입니다. 일반적으로 '0' 또는 '(none)'과 같은 상수 표현식이어야하며 함수가 허용되지 않습니다. 내가 알고있는 유일한 예외는 TIMESTAMP 열의 기본값으로 CURRENT_TIMESTAMP을 설정할 수 있다는 것입니다. 그러나 DATE 또는 DATETIME 열에서는 사용할 수 없습니다. 불행히도 TIMESTAMP은 범위가 작고 시간 정보를 포함합니다.

그래서 옵션은 다음과 같습니다

  1. ()는 당신의 삽입의 값으로 NOW 설정하여 클라이언트 응용 프로그램에서 작업을 수행합니다.
  2. 트리거 작성 :

.

CREATE TRIGGER pollOfTheWeek_trg BEFORE INSERT ON pollOfTheWeek 
    FOR EACH ROW SET NEW.pollDate = NOW(); 

약 공백 값에 대해 간단히 NULL을 사용합니다. 빈 문자열을 사용하는 이유는 무엇입니까?

1

DATE 열을 mysql의 현재 날짜/시간으로 자동 설정하는 방법이 없습니다. TIMESTAMP는 자동으로 현재 시간으로 설정할 수 있습니다. 양자 택일로, 당신이 삽입 매개 변수로 NOW()을 전달합니다 다른 질문으로

INSERT INTO pollOfTheWeek (name, pollDate) VALUES ('someName', NOW()); 

, 당신은 아마 날짜 열에서 NULL 값을 허용 주어진 어떤 일이 없을 때 NULL로 설정합니다.

+0

예, DEFAULT 제약 조건이 있습니다. –

+0

기본값 인 NOW()를 사용하면 DATE 열과 함께 작동하지 않습니다. CURRENT_TIMESTAMP를 기본값으로 지정할 수있는 TIMESTAMP 데이터 유형 C 럼을 제외하고 모든 유형의 C 럼에 대한 디폴트 값으로 함수 또는 표현식을 사용할 수 없습니다. 자세한 내용은 google을 참조하십시오. – oedo

2

당신은 트리거를 만들어야합니다

CREATE TRIGGER triggerName 
BEFORE INSERT ON yourTable 
FOR EACH ROW 
SET NEW.date = coalesce(NEW.date, curdate()); 

빈 값이 null 될 것이다.

+0

수동으로 삽입 된 값을 유지하기 위해 COALESCE를 사용하는 경우 +1 –

관련 문제