• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 1. 데이터 형식 요약
    2. 수치형
    3. 날짜와 시간 형
    1. DATE, DATETIME, 그리고 TIMESTAMP 형
    2. TIME형
    3. YEAR형
    4. YEAR (2)의 제한 및 YEAR (4)로 전환
    5. TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능
    6. 시간 값의 소수 초
    7. 날짜 및 시간 형식 간의 변환
    8. 날짜에서 2 자리 연도
    4. 문자열
    5. 공간 데이터의 확장
    6. 데이터 형 기본값
    7. 데이터 유형의 스토리지 요구 사항
    8. 컬럼에 적절한 형태의 선택
    9. 기타 데이터베이스 엔진의 데이터 형식 사용
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

11.3.5 TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능

MySQL 5.6.5 이후에서는, TIMESTAMP 및 DATETIME 컬럼을 자동으로 초기화 현재 날짜 및 시간 (즉, 현재의 타임 스탬프)에 자동으로 업데이트 할 수 있습니다. 5.6.5 이전에는, 이것은 TIMESTAMP 밖에 맞지 않고 테이블 당 최대 하나의 TIMESTAMP 컬럼에만 적용되지 않습니다. 다음의주의 사항은 첫째, MySQL 5.6.5 이후에 자동 초기화 및 업데이트 기능에 대해 다음 5.6.5 이전 버전의 차이점에 대해 설명합니다.

테이블의 모든 TIMESTAMP 또는 DATETIME 컬럼에 기본값 또는 자동 업데이트 값, 혹은 그 양쪽으로 현재의 타임 스탬프를 할당 할 수 있습니다.

  • 자동 초기화 된 컬럼은 컬럼에 값을 지정하지 않으면 삽입 행에 현재의 타임 스탬프로 설정됩니다.

  • 자동 업데이트 된 컬럼은 행의 다른 컬럼의 값이 현재 값에서 변경되면 현재의 타임 스탬프가 자동으로 업데이트됩니다. 자동 업데이트 된 컬럼은 다른 모든 컬럼을 현재 값으로 설정되어 있으면, 변경되지 않은 채 유지됩니다. 다른 컬럼이 변경 될 때 자동 업데이트 컬럼이 업데이트되지 않도록하려면 명시 적으로이를 현재의 값으로 설정합니다. 다른 컬럼을 변경하지 않더라도 자동 업데이트 컬럼을 업데이트하려면 명시 적으로이를 원하는 값으로 설정합니다 (예를 들어 CURRENT_TIMESTAMP 로 설정합니다).

또한 NULL 속성을 사용하여 NULL 값을 허용하도록 정의되어 있지 않은 한, NULL 값을 할당하여 모든 TIMESTAMP 컬럼을 초기화하거나 현재 날짜와 시간에 업데이트 할 수 있습니다.

자동 등록 정보를 지정하려면 컬럼 정의에서 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 절을 사용합니다. 절 순서는 관계 없습니다. 가 컬럼 정의에있는 경우 모두 먼저 실행할 수 있습니다. CURRENT_TIMESTAMP 동의어 모두 CURRENT_TIMESTAMP 와 같은 의미가 있습니다. 이들은 CURRENT_TIMESTAMP() ) NOW() ) LOCALTIME , LOCALTIME() ) LOCALTIMESTAMP 및 LOCALTIMESTAMP() 입니다.

DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 의 사용은 TIMESTAMP 및 DATETIME 에만 적용됩니다. DEFAULT 절에도 DEFAULT 0 또는 DEFAULT '2000-01-01 00:00:00' 등의 일정 (비 자동)의 기본값을 지정하는 데 사용할 수 있습니다.

참고

DEFAULT 0 을 사용한 다음 예제는 NO_ZERO_DATE SQL 모드가 활성화 된 경우에는 작동하지 않습니다. 이 모드에서는 "제로"의 날짜 값 (예를 들어 0 '0000-00-00 00:00:00' 로 지정)이 거부되기 때문입니다. TRADITIONAL SQL 모드에 NO_ZERO_DATE 가 포함되어 있습니다.

TIMESTAMP 또는 DATETIME 컬럼 정의는 현재 타임 스탬프를 기본값과 자동 업데이트 값 모두에 대해 지정하거나 둘 중 하나에 대해 지정할 수도 모두에 대해 지정하지 않을 수도 있습니다. 다른 컬럼은 자동 프로퍼티 별도의 조합을 가질 수 있습니다. 다음 규칙은 가능성이있는 경우에 대해 설명하고 있습니다.

  • DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 를 모두 사용하면 열은 기본값이 현재의 타임 스탬프가 현재 타임 스탬프가 자동으로 업데이트됩니다.

     CREATE TABLE t1 (
       ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
       dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
     );
    
  • DEFAULT 절을 사용하지만 ON UPDATE CURRENT_TIMESTAMP 절을 사용하지 않으면 열은 소정의 기본값이 설정되어 현재의 타임 스탬프가 자동으로 업데이트되지 않습니다.

    기본값은 DEFAULT 절에서 CURRENT_TIMESTAMP 를 지정하거나 상수 값을 지정 여부에 따라 다릅니다. CURRENT_TIMESTAMP 를 사용하는 경우, 디폴트는 현재 타임 스탬프입니다.

     CREATE TABLE t1 (
       ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       dt DATETIME DEFAULT CURRENT_TIMESTAMP
     );
    

    상수를 사용하는 경우, 디폴트는 소정의 값입니다. 이 경우, 컬럼은 자동 프로퍼티는 없습니다.

     CREATE TABLE t1 (
       ts TIMESTAMP DEFAULT 0
       dt DATETIME DEFAULT 0
     );
    
  • ON UPDATE CURRENT_TIMESTAMP 절과 상수 DEFAULT 절을 사용하면 컬럼은 현재의 타임 스탬프가 자동으로 업데이트되어 소정의 상수 기본값이 있습니다.

     CREATE TABLE t1 (
       ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,
       dt DATETIME DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
     );
    
  • ON UPDATE CURRENT_TIMESTAMP 절을 사용하지만 DEFAULT 절을 사용하지 않는 경우, 컬럼은 자동으로 현재의 타임 스탬프로 업데이트되고 기본값으로 현재의 타임 스탬프는 사용되지 않습니다.

    이 경우 기본값은 형식에 따라 다릅니다. TIMESTAMP 는 NULL 속성을 사용하여 정의되지 않는 한 (이 경우 기본값은 NULL 입니다) 기본값은 0입니다.

     CREATE TABLE t1 (
       ts1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - default 0
       ts2 TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP - default NULL
     );
    

    DATETIME 은 NOT NULL 속성으로 정의되어 있지 않는 한 (이 경우 기본값은 0입니다) 기본은 NULL 입니다.

     CREATE TABLE t1 (
       dt1 DATETIME ON UPDATE CURRENT_TIMESTAMP - default NULL
       dt2 DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP - default 0
     );
    

TIMESTAMP 및 DATETIME 컬럼은 명시 적으로 지정되지 않는 한 자동 등록하지 않습니다. 그러나 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 가치도 명시 적으로 지정되지 않은 경우 기본적으로 처음 TIMESTAMP 컬럼에 모두 존재합니다. 첫번째 TIMESTAMP 컬럼에 대해 자동 등록하지 않으려면 다음 중 하나의 전략을 사용합니다.

  • explicit_defaults_for_timestamp 시스템 변수를 사용합니다. 이 변수가 활성화되면 자동 초기화 및 업데이트 기능을 지정하는 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 절은 사용 가능하지만, 컬럼 정의에 명시 적으로 포함되어 있지 않은 한, 어느 TIMESTAMP 컬럼에 할당 할 수 없습니다 .

  • 또는 explicit_defaults_for_timestamp 가 잘못된 경우 (디폴트) 다음 중 하나를 수행합니다.

    • 상수의 기본값을 지정하는 DEFAULT 절을 포함 컬럼을 정의합니다.

    • NULL 속성을 지정합니다. 또한이를 통해 컬럼에서 NULL 값이 허용됩니다. 즉, 컬럼을 NULL 로 설정하여 현재의 타임 스탬프를 할당 할 수 없습니다. NULL 을 지정하면 컬럼은 NULL 로 설정됩니다.

다음 테이블 정의를 고려하십시오.

 CREATE TABLE t1 (
   ts1 TIMESTAMP DEFAULT 0
   ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                 ON UPDATE CURRENT_TIMESTAMP);
 CREATE TABLE t2 (
   ts1 TIMESTAMP NULL,
   ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                 ON UPDATE CURRENT_TIMESTAMP);
 CREATE TABLE t3 (
   ts1 TIMESTAMP NULL DEFAULT 0
   ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                 ON UPDATE CURRENT_TIMESTAMP);

테이블에는 다음과 같은 특성이 있습니다.

  • 각 테이블 정의에서 첫번째 TIMESTAMP 컬럼은 자동 초기화 또는 업데이트 기능은 없습니다.

  • 각 테이블에서는 ts1 컬럼에 NULL 값을 처리하는 방법이 다릅니다. t1 의 경우 ts1 은 NOT NULL 이며, 이에 NULL 값을 지정하면 현재 타임 스탬프로 설정됩니다. t2 와 t3 의 경우 ts1 는 NULL 을 사용할 수 있으며, 이에 NULL 값을 지정하면 NULL 로 설정됩니다.

  • t2 와 t3 는 ts1 의 기본값이 다릅니다. t2 의 경우 ts1 는 NULL 을 허용하도록 정의되어 있기 때문에, 명시적인 DEFAULT 절이 없으면 기본도 NULL 입니다. t3 의 경우 ts1 는 NULL 을 사용할 수 있지만 명시 적 기본값은 0입니다.

TIMESTAMP 또는 DATETIME 컬럼 정의 중 하나에 명시적인 소수 초 정밀도 값이 포함 된 경우, 컬럼 정의 걸쳐 동일한 값을 사용해야합니다. 다음의 경우 허용됩니다.

 CREATE TABLE t1 (
   ts TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP (6) ON UPDATE CURRENT_TIMESTAMP (6)
 );

다음의 경우는 허용되지 않습니다.

 CREATE TABLE t1 (
   ts TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP (3)
 );

MySQL 5.6.5 이전의 자동 타임 스탬프 프로퍼티

MySQL 5.6.5 이전에는, 자동 초기화 및 업데이트 기능의 지원은 매우 제한적입니다.

  • DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 은 DATETIME 컬럼으로 사용할 수 없습니다.

  • DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 는 테이블 당 최대 하나의 TIMESTAMP 컬럼에서만 사용할 수 없습니다. 현재 타임 스탬프를 한 컬럼의 기본값으로하고 다른 컬럼의 자동 갱신 값은 없습니다.

이러한 특성을 사용하든, 어떤 TIMESTAMP 컬럼에 필요한 하나를 선택할 수 있습니다. 이것은 자동으로 초기화되거나 현재의 타임 스탬프가 자동으로 갱신되는 테이블에서 첫 번째 열 필요가 없습니다. 다른 TIMESTAMP 컬럼에 대한 자동 초기화 또는 업데이트를 지정하려면 위에서 설명한대로 첫 번째 컬럼에 대한 자동 등록을 제한해야합니다. 이 경우 다른 TIMESTAMP 컬럼은 DEFAULT 및 ON UPDATE 절은 처음의 TIMESTAMP 컬럼의 경우와 동일하지만 두 어구를 생략하면 자동 초기화도 업데이트도하지 않습니다.

TIMESTAMP 초기화 및 NULL 속성

기본적으로 TIMESTAMP 컬럼은 NOT NULL 이며, NULL 값을 포함 할 수 없으며 NULL 을 지정하면 현재 타임 스탬프가 할당됩니다. NULL 을 포함하는 TIMESTAMP 컬럼을 허용하려면 NULL 속성으로 명시 적으로 선언합니다. 이 경우 다른 기본값을 지정하는 DEFAULT 절에서 대체되지 않는 한 기본값이 NULL 입니다. DEFAULT NULL 을 사용하면 기본값으로 NULL 을 명시 적으로 지정할 수 있습니다. ( NULL 속성이 선언되지 않은 TIMESTAMP 컬럼의 경우 DEFAULT NULL 은 사용할 수 없습니다.) TIMESTAMP 컬럼에 NULL 값을 허용하면 NULL 을 지정하면,이 컬럼은 현재의 타임 스탬프가 아닌 NULL 로 설정됩니다.

다음 테이블에는 NULL 값을 허용하는 여러 TIMESTAMP 컬럼이 포함되어 있습니다.

 CREATE TABLE t
 (
   ts1 TIMESTAMP NULL DEFAULT NULL,
   ts2 TIMESTAMP NULL DEFAULT 0
   ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
 );

NULL 값을 허용하는 TIMESTAMP 컬럼은 다음 중 하나에 해당하는 경우를 제외하고는 삽입시에 현재의 타임 스탬프를 가지고 있지 않습니다.

  • 디폴트 값이 CURRENT_TIMESTAMP 로 정의 된 컬럼에 값이 지정되지 않은

  • CURRENT_TIMESTAMP 또는 NOW() 등의 그 중 하나의 동의어가 명시 적으로 컬럼에 삽입되어있는

즉, NULL 값을 허용하도록 정의 된 TIMESTAMP 컬럼은, 정의에 DEFAULT CURRENT_TIMESTAMP 가 포함되어있는 경우에만 자동 초기화합니다.

 CREATE TABLE t (ts TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP);

TIMESTAMP 컬럼에 NULL 값을 허용하고 있지만, 정의에 DEFAULT CURRENT_TIMESTAMP 가 포함되어 있지 않은 경우, 현재 날짜와 시간에 해당하는 값을 명시 적으로 삽입해야합니다. t1 및 t2 테이블에 다음의 정의가 있다고합니다.

 CREATE TABLE t1 (ts TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00');
 CREATE TABLE t2 (ts TIMESTAMP NULL DEFAULT NULL);

삽입 할 때 어느 테이블의 TIMESTAMP 컬럼을 현재 타임 스탬프로 설정하려면 명시 적으로 그 컬럼에 값을 할당합니다. 예 :

 INSERT INTO t1 VALUES (NOW ());
 INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved