MySQL에서는 SHOW TABLE STATUS 명령어를 사용하면 데이터베이스에 있는 각 테이블의 생성 날짜(Create_time)와 마지막 수정 날짜(Update_time)를 정확하게 확인할 수 있습니다.
기본 문법
테이블의 생성 및 수정 시간을 조회할 때 사용하는 기본 문법은 다음과 같습니다.
SHOW TABLE STATUS;
데이터베이스 선택하기
이번 예제에서는 여러 테이블이 이미 생성되어 있는 test3 데이터베이스를 사용합니다. 먼저 해당 데이터베이스를 선택합니다.
mysql> use test3; Database changed
테이블 목록 확인하기
다음 쿼리를 실행하면 test3 데이터베이스에 존재하는 모든 테이블을 확인할 수 있습니다.
mysql> show tables;
실행 결과는 다음과 같습니다.
+-------------------------+ | Tables_in_test3 | +-------------------------+ | add6hour | | deletedemo | | differentdatetime | | fieldlessthan5chars | | lastrecordbeforelastone | | mostrecentdatedemo | | nullcasedemo | | order | | orderbydatethentimedemo | | posts | | productdemo | | radiansdemo | | siglequotesdemo | | studentinformation | | updatestringdemo | +-------------------------+ 15 rows in set (0.00 sec)
테이블 생성일·수정일 조회하기
테이블의 상태 정보를 확인하려면 아래 쿼리를 실행합니다.
mysql> show table status;
실행 결과에는 각 테이블의 전체 상태 정보가 출력됩니다. 이 중에서 우리가 필요로 하는 정보인 Create_time(생성일)과 Update_time(수정일) 컬럼을 함께 확인할 수 있습니다. 아래 결과는 가독성을 위해 주요 컬럼만 발췌한 것입니다.
+-------------------------+--------+------+---------------------+-------------+ | Name | Engine | Rows | Create_time | Update_time | +-------------------------+--------+------+---------------------+-------------+ | add6hour | InnoDB | 0 | 2019-02-14 18:33:27 | NULL | | deletedemo | InnoDB | 6 | 2019-02-13 19:20:04 | NULL | | differentdatetime | InnoDB | 4 | 2019-02-14 10:26:28 | NULL | | fieldlessthan5chars | InnoDB | 8 | 2019-02-13 19:03:05 | NULL | | lastrecordbeforelastone | InnoDB | 8 | 2019-02-14 17:31:59 | NULL | | mostrecentdatedemo | InnoDB | 6 | 2019-02-14 17:15:53 | NULL | | nullcasedemo | InnoDB | 6 | 2019-02-14 17:55:39 | NULL | | order | InnoDB | 8 | 2019-02-14 14:23:38 | NULL | | orderbydatethentimedemo | InnoDB | 4 | 2019-02-14 18:05:36 | NULL | | posts | InnoDB | 0 | 2019-02-13 18:19:06 | NULL | | productdemo | InnoDB | 4 | 2019-02-13 20:06:36 | NULL | | radiansdemo | InnoDB | 2 | 2019-02-14 14:33:24 | NULL | | siglequotesdemo | InnoDB | 0 | 2019-02-14 10:41:23 | NULL | | studentinformation | InnoDB | 0 | 2019-02-14 17:06:07 | NULL | | updatestringdemo | InnoDB | 2 | 2019-02-13 18:25:59 | NULL | +-------------------------+--------+------+---------------------+-------------+ 15 rows in set (0.72 sec)
출력 결과가 너무 길다면 특정 테이블만 지정해서 조회하는 것이 좋습니다.
mysql> show table status where Name = 'posts';
information_schema를 활용한 조회 방법
SHOW TABLE STATUS 대신 information_schema.TABLES 뷰를 조회하면 필요한 컬럼만 깔끔하게 추출할 수 있습니다.
SELECT TABLE_NAME,
CREATE_TIME,
UPDATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'test3';
참고 사항
- InnoDB 스토리지 엔진을 사용하는 테이블은 Update_time 값이 NULL로 표시될 수 있습니다. 위 예제에서도 모든 테이블의 Update_time이 NULL로 출력된 것을 확인할 수 있습니다.
- MyISAM 엔진 테이블은 INSERT나 UPDATE 작업이 발생할 때마다 Update_time이 자동으로 갱신됩니다.
- 정확한 최근 변경 이력이 필요하다면 테이블에 DATETIME 타입의 updated_at 컬럼을 추가하고
ON UPDATE CURRENT_TIMESTAMP옵션을 설정하는 방법도 고려해 보세요.