ON UPDATE CURRENT_TIMESTAMP는 레코드가 수정될 때 명시적으로 타임스탬프 값을 지정하지 않아도 해당 컬럼이 자동으로 현재 시간으로 갱신되도록 하는 MySQL의 속성입니다. 하지만 경우에 따라 이 자동 갱신 동작을 제거하고 싶을 수 있습니다.
컬럼에서 ON UPDATE CURRENT_TIMESTAMP 속성을 제거하려면 ALTER 명령어를 사용하면 됩니다.
기본 문법
ALTER TABLE yourTableName CHANGE yourTimeStampColumnName yourTimeStampColumnName timestamp NOT NULL default CURRENT_TIMESTAMP;
위 문법을 실제로 이해하기 위해 테이블을 하나 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table removeOnUpdateCurrentTimeStampDemo
- > (
- > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
- > Name varchar(20),
- > UserUpdateTimestamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
- > );
Query OK, 0 rows affected (0.54 sec)테이블 구조 확인
DESC 명령어를 사용하여 테이블 구조를 확인할 수 있습니다.
mysql> desc removeOnUpdateCurrentTimeStampDemo;
실행 결과는 다음과 같습니다.
+---------------------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+-------------+------+-----+-------------------+-----------------------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(20) | YES | | NULL | | | UserUpdateTimestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +---------------------+-------------+------+-----+-------------------+-----------------------------+ 3 rows in set (0.04 sec)
출력 결과의 Extra 필드에 on update CURRENT_TIMESTAMP가 설정되어 있는 것을 확인할 수 있습니다. 이제 이 속성을 제거하는 쿼리는 다음과 같습니다.
ON UPDATE CURRENT_TIMESTAMP 제거하기
mysql> alter table removeOnUpdateCurrentTimeStampDemo
- > change UserUpdateTimestamp UserUpdateTimestamp timestamp NOT NULL default CURRENT_TIMESTAMP;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0변경이 적용되었는지 다시 한번 테이블 구조를 확인해 보겠습니다.
mysql> desc removeOnUpdateCurrentTimeStampDemo;
실행 결과는 다음과 같습니다.
+---------------------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+-------------+------+-----+-------------------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(20) | YES | | NULL | | | UserUpdateTimestamp | timestamp | NO | | CURRENT_TIMESTAMP | | +---------------------+-------------+------+-----+-------------------+----------------+ 3 rows in set (0.00 sec)
Extra 필드에서 on update CURRENT_TIMESTAMP가 사라진 것을 확인할 수 있습니다.
DEFAULT CURRENT_TIMESTAMP까지 함께 제거하기
만약 자동 갱신 속성뿐만 아니라 기본값인 DEFAULT CURRENT_TIMESTAMP까지 모두 제거하고 싶다면 다음과 같은 쿼리를 사용합니다.
mysql> alter table removeOnUpdateCurrentTimeStampDemo
- > change UserUpdateTimestamp UserUpdateTimestamp timestamp NOT NULL;
Query OK, 0 rows affected (0.12 sec)
Records: 0 Duplicates: 0 Warnings: 0다시 테이블 구조를 확인해 보겠습니다.
mysql> desc removeOnUpdateCurrentTimeStampDemo;
실행 결과는 다음과 같습니다.
+---------------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+-------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(20) | YES | | NULL | | | UserUpdateTimestamp | timestamp | NO | | NULL | | +---------------------+-------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
위 실행 결과에서 볼 수 있듯이 Default와 Extra 필드가 모두 비워지면서 ON UPDATE CURRENT_TIMESTAMP 속성이 성공적으로 제거된 것을 확인할 수 있습니다. 이처럼 ALTER TABLE과 CHANGE 절을 활용하면 컬럼 정의를 원하는 형태로 손쉽게 변경할 수 있습니다.