MySQL에서 테이블의 마지막 접근 또는 쓰기(수정) 시간을 확인하려면 INFORMATION_SCHEMA.TABLES의 update_time 컬럼을 조회하면 됩니다. 기본 문법은 다음과 같습니다.
SELECT update_time FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'yourDatabaseName' AND table_name = 'yourTableName'
위 문법은 MyISAM 스토리지 엔진을 사용하는 테이블에 대해 마지막 수정 시간 정보를 정상적으로 반환합니다.
이번 예제에서는 데이터베이스로 'business'를 사용하고, 테이블 이름은 'twoprimarykeytabledemo'를 사용하겠습니다.
Case 1: MyISAM 테이블의 마지막 수정 시간 조회
다음 쿼리를 실행합니다.
mysql> SELECT update_time
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE table_schema = 'business'
-> AND table_name = 'twoprimarykeytabledemo';실행 결과는 다음과 같습니다.
+---------------------+ | UPDATE_TIME | +---------------------+ | 2018-11-21 16:51:50 | +---------------------+ 1 row in set (0.24 sec)
테이블이 마지막으로 수정된 시각인 2018-11-21 16:51:50이 정상적으로 출력되었습니다.
Case 2: 다른 테이블에 적용하기
같은 데이터베이스 내 다른 테이블 'currenttimezone'에도 동일한 쿼리를 적용할 수 있습니다.
mysql> SELECT update_time -> FROM INFORMATION_SCHEMA.TABLES -> WHERE table_schema = 'business' -> AND table_name = 'currenttimezone';
실행 결과는 다음과 같습니다.
+---------------------+ | UPDATE_TIME | +---------------------+ | 2018-10-29 17:20:18 | +---------------------+ 1 row in set (0.20 sec)
Case 3: InnoDB 테이블인 경우 NULL 반환
주의할 점은, 테이블의 스토리지 엔진이 InnoDB라면 update_time 값이 NULL로 반환된다는 것입니다. InnoDB는 MySQL 5.7 이전 버전에서 INFORMATION_SCHEMA에 갱신 시간을 기록하지 않기 때문입니다.
다음 쿼리를 실행해 보겠습니다.
mysql> SELECT update_time -> FROM INFORMATION_SCHEMA.TABLES -> WHERE table_schema = 'business' -> AND table_name = 'zerofilldemo';
실행 결과는 다음과 같습니다.
+-------------+ | UPDATE_TIME | +-------------+ | NULL | +-------------+ 1 row in set (0.09 sec)
정리
- INFORMATION_SCHEMA.TABLES의 update_time 컬럼을 조회하면 테이블의 마지막 수정 시간을 알 수 있습니다.
- MyISAM 엔진 테이블은 정확한 시간 값을 반환하지만, InnoDB 테이블(MySQL 5.7 미만)은 NULL을 반환합니다.
- 참고로 이 값은 '마지막 읽기'가 아닌 '마지막 쓰기(INSERT/UPDATE/DELETE)' 시간을 나타내며, 순수한 읽기 접근 시간은 일반적인 방법으로는 확인할 수 없습니다.