programing

생성 시 및 업데이트 시 MySQL CURRENT_TIMESTamp

newsource 2022. 10. 6. 22:00

생성 시 및 업데이트 시 MySQL CURRENT_TIMESTamp

다음과 같은 2개의 TIMESTAMP 필드가 있는 테이블을 정의합니다.

CREATE TABLE `msgs` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `msg` VARCHAR(256),
    `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

에러를 회피하는 방법:

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

요점은 바람직한 동작을 유지하는 것입니다.ts_create그리고.ts_update테이블 스키마에 있습니다.

이것은 오래된 투고라고 생각합니다만, 실제로 mysql은 최근 에디션 mysql 5.6.25에서 2 TIMESTAMP를 서포트하고 있습니다.

나는 아래의 기술을 사용하여 가능하다고 생각한다.

`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

이전 버전의 MySql을 사용하고 있습니다.myqsl을 5.6.5 이상으로 업데이트하면 작동합니다.

테이블에는 CURRENT_TIMESTamp 기본값과 동일한 TIMESTamp 열을 2개 사용할 수 없습니다.다음 링크를 참조하십시오.http://www.mysqltutorial.org/mysql-timestamp.aspx

ts_create는 datetime(그래서 이름 변경 -> dt_create)으로 하고 ts_update만 타임스탬프로 하고 싶다고 생각합니다.이렇게 하면 한 번 설정하면 변경되지 않습니다.

datetime은 수동으로 제어되는 값을 위한 것으로 MySQL이 이를 유지한다는 점에서 타임스탬프는 조금 특별합니다.따라서 ts_create에는 datetime을 선택하는 것이 좋습니다.

ts_update에는 DEFAULT CURRENT_TIMESTamp가 필요 없습니다.이것이 비어 있으면 갱신되지 않기 때문에, 「마지막 갱신」은 ts_create입니다.

이것은 이전 버전에서의 Mysql의 작은 제한입니다.실제로 버전 5.6 이후, 복수의 타임스탬프가 기능합니다.

이거 드셔보세요ts_create타임스탬프 디폴트 CURRENT_TIMESTamp_TIMESTamp,ts_update업데이트 시 타임스탬프 기본 NULL_TIMESTamp

언급URL : https://stackoverflow.com/questions/4897002/mysql-current-timestamp-on-create-and-on-update