복붙노트

[SQL] 날짜 데이터 형식에 대한 기본 값으로 () NOW 설정?

SQL

날짜 데이터 형식에 대한 기본 값으로 () NOW 설정?

나는 날짜 데이터 형식으로 구성 테이블 사용자, 즉 registerDate 및 lastVisitDate에서 두 개의 열이 있습니다. 나는 다음을 수행하고 싶습니다.

테이블이 이미 존재하는 기존 기록을 가지고 있기 때문에, 나는 수정 테이블을 사용하고 싶습니다. 나는 아래의 코드의 두 조각을 사용하여 시도했지만, 둘은 작동하지 않습니다.

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

'registerDate'에 대한 잘못된 기본값 : ERROR 1067 (42000) : 그것은 나에게 오류를 제공합니다

그것은 나를 MySQL의에서 () NOW에 기본 날짜 시간 값을 설정할 수 있습니까?

해결법

  1. ==============================

    1.MySQL은 5.6.5로, 당신은 동적 기본 값으로 DATETIME 유형을 사용할 수 있습니다 :

    MySQL은 5.6.5로, 당신은 동적 기본 값으로 DATETIME 유형을 사용할 수 있습니다 :

    CREATE TABLE foo (
        creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
        modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
    )
    

    심지어 두 규칙을 결합 :

    modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    

    참고: http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

    5.6.5 이전에, 당신은 레코드가 수정 될 때마다 자동으로 업데이트하는 TIMESTAMP 데이터 유형을 사용해야합니다. 그러나 불행하게도, 단 하나의 자동 업데이트 TIMESTAMP 필드는 테이블 당 존재할 수 있습니다.

    CREATE TABLE mytable (
      mydate TIMESTAMP
    )
    

    참조 : http://dev.mysql.com/doc/refman/5.1/en/create-table.html

    당신은 (INSERT에 만 트리거가 그래서) 당신이 정의를 변경할 수 있습니다 UPDATE에 타임 스탬프 값을 업데이트에서 MySQL을 방지하려면 :

    CREATE TABLE mytable (
      mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
    
  2. ==============================

    2.나는 새로운 인서트 NOW ()로 날짜 시간 필드를 설정하는 해결 방법으로 트리거를 사용합니다 :

    나는 새로운 인서트 NOW ()로 날짜 시간 필드를 설정하는 해결 방법으로 트리거를 사용합니다 :

    CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
    FOR EACH ROW 
    SET NEW.datetimefield = NOW()
    

    너무 업데이트가 작동합니다

    요한 & 레오나르도 의한 답변은 타임 스탬프 필드로 변환하는 것을 포함한다. 이것은 아마도 (RegisterDate 및 LastVisitDate 저장) 문제에서 제시 한 사용 사례에 대한 확인하지만, 그것은 보편적 인 해결책이 아니다. 타임 스탬프 질문 대 날짜를 참조하십시오.

  3. ==============================

    3.내 솔루션

    내 솔루션

    ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
    NULL DEFAULT CURRENT_TIMESTAMP;
    
  4. ==============================

    4.당신은 / 펠트를 어떻게 생각하는지 MySQL은 기본 DATETIME 값을 설정하려고 마음을 잃은 모든 사람들을 위해, 나는 정확히 알고있다. 그래서 여기있다 :

    당신은 / 펠트를 어떻게 생각하는지 MySQL은 기본 DATETIME 값을 설정하려고 마음을 잃은 모든 사람들을 위해, 나는 정확히 알고있다. 그래서 여기있다 :

    `ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0
    

    조심스럽게 I는 0 주위에 작은 따옴표 / 큰 따옴표를 추가하지 않은 것을 관찰한다.

    중요 업데이트 :

    이 답변은 오랫동안 등을 게시했습니다. 그때, 그것은 MySQL의 내 (아마도 최신) 설치에 근무하고 나는 그것을 공유하는 것 같은 느낌이 들었다. 지금이 솔루션을 사용하기로 결정하기 전에 아래 설명을 읽어 보시기 바랍니다.

  5. ==============================

    5.MySQL은 5.6 문서는 CURRENT_TIMESTAMP 모두 TIMESTAMP 및 DATETIME 데이터 유형에 대한 기본값으로 사용할 수 있다는 말 :

    MySQL은 5.6 문서는 CURRENT_TIMESTAMP 모두 TIMESTAMP 및 DATETIME 데이터 유형에 대한 기본값으로 사용할 수 있다는 말 :

    http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

  6. ==============================

    6.버전 5.6.5 및 최신을 MySQL을, 당신은 정확한 날짜 시간 및 기본값 설정 값뿐만 아니라 사용할 수 있습니다. 날짜 시간과 NOW () 함수 호출 모두 정밀도 값을 전달하는 미묘한 비트 비록이있다.

    버전 5.6.5 및 최신을 MySQL을, 당신은 정확한 날짜 시간 및 기본값 설정 값뿐만 아니라 사용할 수 있습니다. 날짜 시간과 NOW () 함수 호출 모두 정밀도 값을 전달하는 미묘한 비트 비록이있다.

    이 예 작품 :

        ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW(6);
    

    이 예 작동하지 않음 :

        ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW();
    
  7. ==============================

    7.

    `ALTER TABLE  `table_name` CHANGE `column_name` 
        timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
        ON UPDATE CURRENT_TIMESTAMP
    

    업데이트에 대한 타임 스탬프를 업데이트하는 데 사용할 수 있습니다.

  8. ==============================

    8.가장 좋은 방법은 "DEFAULT 0"을 사용하고 있습니다. 다른 방법 :

    가장 좋은 방법은 "DEFAULT 0"을 사용하고 있습니다. 다른 방법 :

        /************ ROLE ************/
        drop table if exists `role`;
        create table `role` (
            `id_role` bigint(20) unsigned not null auto_increment,
            `date_created` datetime,
            `date_deleted` datetime,
            `name` varchar(35) not null,
            `description` text,
            primary key (`id_role`)
        ) comment='';
    
        drop trigger if exists `role_date_created`;
        create trigger `role_date_created` before insert
            on `role`
            for each row 
            set new.`date_created` = now();
    
  9. ==============================

    9.이것은 MySQL을 사용, 나를 위해 일한 :

    이것은 MySQL을 사용, 나를 위해 일한 :

    ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();
    
  10. ==============================

    10.

    ALTER TABLE table_name
      CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
    

    마지막으로, 이것은 나를 위해 일한!

  11. ==============================

    11.

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
      `dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      UNIQUE KEY `mobile_UNIQUE` (`mobile`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    
  12. ==============================

    12.이 간다 여기에 여전히 활성화되어 있지만 확실하지.

    이 간다 여기에 여전히 활성화되어 있지만 확실하지.

    지금에 기본값을 설정에 관해서는 (), 나는이 DATETIME 데이터 유형에 대한 가능한 것으로 표시되지 않습니다. 해당 데이터 형식을 사용하려면이 같은 삽입을 수행 할 때, 날짜를 설정 :

    INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))
    

    MySQL의 내 버전은 5.5입니다

  13. ==============================

    13.이것은 나를 위해 일한 - 내 테이블에 대해 UPDATE에 INSERT를 변경했습니다.

    이것은 나를 위해 일한 - 내 테이블에 대해 UPDATE에 INSERT를 변경했습니다.

    INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))
    
  14. from https://stackoverflow.com/questions/5818423/set-now-as-default-value-for-datetime-datatype by cc-by-sa and MIT license