programing

MySQL Current_TIMESTAMP가 기본값으로 표시됨

lovejava 2023. 8. 22. 21:42

MySQL Current_TIMESTAMP가 기본값으로 표시됨

테이블을 만드는 동안 다음 오류가 발생합니다.

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

두 의 열을 있지 입니다.TIMESTAMP와 함께CURRENT_TIMESTAMP저는 둘 다 으로적둘, 사지않습다니하용다기본▁i를 사용하지 .ON UPDATE

실행하려는 DDL 쿼리는

CREATE TABLE user(
    /* Basic Information */
    id INT NOT NULL AUTO_INCREMENT,
    firstname VARCHAR(255) NOT NULL,
    surname VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    username VARCHAR(255) NOT NULL UNIQUE,
    password CHAR(40) NOT NULL,

    /* System status information */
    active BOOL NOT NULL DEFAULT FALSE,
    validated BOOL NOT NULL DEFAULT FALSE,
    date_validated TIMESTAMP,
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    /* Index */
    PRIMARY KEY (id)
) Engine=InnoDB;

문제의 원인은 무엇입니까?

한 테이블에 두 개의 타임스탬프를 사용할 수 있습니다.기본적으로 DEFAULT 필드를 먼저 사용한 후 나머지 타임스탬프 필드를 사용합니다.

아래 쿼리가 작동합니다.

CREATE TABLE myTable 
(
 id INT,
 date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
 date_validated TIMESTAMP
);

sqlfidle에서 데모

MySQL 5.6.5부터는 이러한 제한이 더 이상 존재하지 않는다는 점에 유의해야 한다고 생각합니다.제한이 제거되었으며 일부 추가 기능이 추가되었습니다.특히: DATTIME 필드뿐만 아니라 여러 TIMESTAMP 필드에도 다음 블로그 게시물(수정한 사람이 쓴 것으로 추정됨)에 설명된 대로 필드를 현재 타임스탬프/날짜 시간으로 설정하는 자동 기본값이 있을 수 있습니다. http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

내용은 이쪽
또한 기본 날짜 및 시간 값을 생성하는 방법을 정확히 읽어보는 것도 유용할 수 있습니다.
아래 링크에 설명된 대로 DATTIME 및 TIMESTAMP 데이터 유형을 모두 설정하여 해당 행에 대한 INSERT 작업의 현재 날짜 및 시간에 대한 기본값을 열에 지정할 수 있습니다.또는 업데이트 작업의 필드에서 현재 날짜와 시간을 설정하도록 업데이트를 설정할 수 있습니다.
링크:
http://dev.mysql.com/doc/refman/5.7/en/.htmlhttp ://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

다음은 CREATE TABLE 문에서 두 가지 모두의 모습입니다.

CREATE TABLE t1 (
ts1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,ts2 TIMESTAMP DEFAULT NOW()
);

CURRENT_TIMESTAMP는 NOW()의
또한 TIMESTAMP 또는 DATTIME 필드를 NULL로 설정하면 DEFAULT 열이 날짜 시간 값이 아닌 NULL로 변경됩니다(자세한 내용은 링크 참조).
날짜 범위가 될 수 . DATTIME 는과같날짜포수있다습니될함가위.
~ 1000-01-01 ~ 9999-12-31
다음과 같습니다. TIMESTAMP 범위 같습 니다다 과음는 ▁while 니다습.
00 ~ 03 1970-01-01 00:00:01 ~ 2038-01-190 03:14:07
DATTIME과 TIMESTAMP 사이의 추가 비교는 이 MySQL 매뉴얼 페이지를 참조하십시오.

블로그 게시물을 인용하겠습니다. "MySQL은 어떤 이유로든 테이블당 하나의 자동 업데이트 타임스탬프만 허용합니다.이 문제를 해결하는 방법은 여러 가지가 있지만 모든 방법이 썩지는 않습니다."

각 타임스탬프에 대해 트리거를 사용하는 것이 좋습니다.

CREATE TRIGGER customer_create BEFORE INSERT ON `customer`
FOR EACH ROW SET NEW.created_at = NOW(), NEW.updated_at = NOW();

자세한 내용은 게시물 자체를 참조하십시오.

언급URL : https://stackoverflow.com/questions/11400147/mysql-current-timestamp-as-default