회원 등록일자 컬럼의 자동 업데이트 문제 해결하기

LeeYulhee·2023년 11월 9일
0

👉 문제


  • 회원 정보 수정할 때, UPDATE 쿼리에 UPD_DTM만 CURRENT_TIMESTAMP로 수정되게 작성했으나 REG_DTM도 UPDATE 시간으로 계속 같이 수정됨
    • UPD_DTM : 회원 정보 수정 일자 컬럼
    • REG_DTM : 회원 정보 생성 일자 컬럼



👉 접근


  • 코드의 문제인 줄 알아서 거듭 확인했으나 문제가 없어서 MySQL에서 직접 쿼리 입력
    • ⇒ 에디터에서 쿼리를 입력해도 동일하게 REG_DTM에 수정 일자로 UPDATE 되는 문제 발생
  • 해당 테이블의 컬럼 정보 조회
    DESCRIBE `user`;
    • ⇒ REG_DTM에 자동으로 ON UPDATE CURRENT_TIMESTAMP 설정된 걸 확인




👉 원인 추측


  • MySQL의 특정 버전에서 TIMESTAMP 타입의 필드에 대한 기본 동작 때문일 수도 있음
    • MySQL 5.6.5 이상 버전에서 바뀌긴 했음
    • 명시한 DEFAULT가 없으면 MySQL에서 자동으로 설정
  • MySQL 설정 문제일 수도 있음



👉 해결 방법


  • NULL 허용
    REG_DTM TIMESTAMP(6) NULL DEFAULT NULL
    • NULL을 허용하고 DEFAULT를 NULL로 설정하면 ON UPDATE CURRENT_TIMESTAMP 설정이 되지 않음
  • NULL 허용하지 않고 DEFAULT로 '0000-00-00 00:00:00.000000’ 명시적으로 주기
    REG_DTM TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000
    • 다만 이렇게 작성했을 경우 '0000-00-00 00:00:00.000000’ 자체는 유효하지 않은 값
      • MySQL 서버가 NO_ZERO_DATE 모드로 설정되어 있으면 이 값은 허용되지 않아 오류 발생
    • ⇒ 권장되지 않는 방법
  • NULL 허용하지 않고 DEFUALT로 CURRENT_TIMESTAMP 명시적으로 주기
    REG_DTM TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보