programing tip

작성 및 업데이트시 MySQL CURRENT_TIMESTAMP

itbloger 2020. 11. 21. 14:35
반응형

작성 및 업데이트시 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_createts_update테이블 스키마를.


이것은 mySQL의 제한 사항이며 CURRENT_TIMESTAMP를 참조하는 기본값이있는 두 개의 TIMESTAMP 열을 가질 수 없습니다 . 이를 수행하는 유일한 방법은 불행히도 NOW ()의 기본값을 가질 수없는 ts_create에 DATETIME 유형을 사용하는 것입니다. 그래도 자신의 방아쇠를 굴려서 그렇게 할 수 있습니다.


이것이 오래된 게시물이라고 생각하지만 실제로 mysql은 최근 버전 mysql 5.6.25에서 2 TIMESTAMP를 지원한다고 생각합니다.


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


아래 기술을 사용하면 가능하다고 생각합니다

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

테이블에 동일한 기본값 CURRENT_TIMESTAMP를 가진 두 개의 TIMESTAMP 열이있을 수 없습니다. 이 링크를 참조하십시오 : http://www.mysqltutorial.org/mysql-timestamp.aspx


나는 당신이 ts_create를 datetime으로 원한다고 생각하고 (이름 바꾸기-> dt_create) ts_update 만 타임 스탬프로 원합니까? 이렇게하면 일단 설정되면 변경되지 않습니다.

내 이해는 datetime은 수동으로 제어되는 값을위한 것이고 타임 스탬프는 MySQL이 당신을 위해 그것을 유지한다는 점에서 약간 "특별하다"는 것입니다. 이 경우 datetime은 ts_create에 대한 좋은 선택입니다.


ts_update에 DEFAULT CURRENT_TIMESTAMP가 필요하지 않다고 말하고 싶습니다. 비어 있으면 업데이트되지 않으므로 '마지막 업데이트'는 ts_create입니다.


이것은 실제로 버전 5.6 이상에서 여러 타임 스탬프가 작동 한 후 이전 버전에서 Mysql의 작은 제한 사항입니다.


ts_createTIMESTAMP DEFAULT CURRENT_TIMESTAMP, ts_updateTIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP를 시도해 볼 수 있습니다.

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

반응형