Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 기존 컬럼에서 ON UPDATE CURRENT_TIMESTAMP 속성을 제거하는 방법

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 절을 활용하면 컬럼 정의를 원하는 형태로 손쉽게 변경할 수 있습니다.