source

NOW()를 datetime 데이터 유형의 기본값으로 설정하시겠습니까?

manysource 2022. 12. 24. 17:44

NOW()를 datetime 데이터 유형의 기본값으로 설정하시겠습니까?

에는 두 . 즉, '열'은 '열'입니다.registerDate and lastVisitDate typedatetime으로 됩니다.저는 다음과 같이 하고 싶습니다.

  1. registerDate 기본값을 MySQL NOW()로 설정합니다.
  2. 을 lastVisitDate로 합니다.0000-00-00 00:00:00

테이블이 이미 존재하고 기존 레코드가 있기 때문에 Modify 테이블을 사용하고 싶습니다.아래 두 개의 코드를 사용해 봤지만 둘 다 작동하지 않습니다.

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

: : : it it it it it it it me me it 。ERROR 1067 (42000): Invalid default value for 'registerDate'

MySQL에서 기본 datetime 값을 NOW()로 설정할 수 있습니까?

5.부터는 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.htmlhttpdev.mysql.com/doc/refman/5.7/en/.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.htmlhttpoptimize-this.blogspot.com/2012/04/.html

에서는 5.6.5를 해야 .TIMESTAMP레코드가 수정될 때마다 자동으로 업데이트됩니다. 유감스럽게도 된 것은 입니다.TIMESTAMP필드는 테이블마다 존재할 수 있습니다.

CREATE TABLE mytable (
  mydate TIMESTAMP
)

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

하지 않도록 UPDATE 때문에, ( 「」, 「」)에만.INSERT의를 다음과 같이 수 있습니다

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

트리거를 회피책으로 사용하여 새로운 삽입을 위해 datetime 필드를 NOW()로 설정합니다.

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

업데이트에도 사용할 수 있습니다.

Johan & Leonardo의 답변에는 타임스탬프 필드로의 변환이 포함됩니다.이 방법은 질문에 제시된 사용 사례(RegisterDate 및 LastVisitDate 저장)에는 적합하지만 범용 솔루션은 아닙니다.datetime vs 타임스탬프 질문을 참조하십시오.

나의 솔루션

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

유레카!!!


MySQL에서 디폴트 DATETIME 값을 설정하려다 낙담한 모든 분들을 위해, 저는 당신의 기분과 기분을 정확히 알고 있습니다.여기 있습니다.

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

0 주위작은 따옴표/큰따옴표를 추가하지 않았음을 주의 깊게 관찰하십시오.


중요 업데이트:

이 답변은 오래전에 게시되었다.그 당시에는 MySQL(아마도 최신) 설치에서 작동했고 공유하려고 했습니다.지금 바로 이 솔루션을 사용하기 전에 아래 의견을 읽어보시기 바랍니다.

mysql 5.6.5 이후 버전에서는 정확한 데이터 타임을 사용하여 기본값을 설정할 수도 있습니다.단, datetime과 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();

mysql 5.6 문서에서는 CURRENT_TIMESTamp는 TIMESTAMP 및 DATETIME 데이터 유형 모두에서 기본값으로 사용할 수 있다고 합니다.

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

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

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

가장 좋은 방법은 "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();

MySQL을 사용하면 다음과 같이 동작합니다.

ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();
ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

마침내, 이것은 나에게 효과가 있었다!

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;

이게 아직 활성화 되어 있는지 잘 모르겠지만 갑니다.

디폴트 설정에 대해서입니다만, DATETIME 데이터 타입은 사용할 수 없다고 생각합니다.이 데이터 유형을 사용하려면 삽입을 수행할 날짜를 다음과 같이 설정합니다.

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

mySQL 버전은 5.5입니다.

이 방법은 효과가 있었습니다.테이블의 INSERT를 UPDATE로 변경했습니다.

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

언급URL : https://stackoverflow.com/questions/5818423/set-now-as-default-value-for-datetime-datatype