테이블 최근 수정일, 갱신일 확인
이번에는 테이블 마지막 업데이트 시간을 알고 싶을때 사용하는 방법에 대해 알아보겠습니다.
주의사항
MySQL 5.7버전 이하에는 InnoDB에 버그가 있어 정상적으로 UPDATE_TIME을 불러올수 없는 이슈가 있습니다.
또한 서버가 다시 시작되거나 테이블이 InnoDB 데이터 사전 캐시에서 제거되면 타임스탬프가 유지되지 않아 정상적으로 사용할 수 없습니다.
그래서 방법3에 직접 시간을 관리하는 방법도 같이 서술해놓겠습니다.
방법1. SHOW TABLE STATUS
SHOW TABLE STATUS LIKE '테이블명';
+------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| test | InnoDB | 10 | Dynamic | 1 | 16384 | 16384 | 0 | 0 | 0 | NULL | 2024-03-27 09:38:55 | 2024-03-27 09:39:05 | NULL | utf8mb4_unicode_ci | NULL | | |
+------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
방법2. INFORMATION_SCHEMA.TABLES
DB명과 테이블명으로 확인
SELECT UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DB명'
AND TABLE_NAME = '테이블명';
+---------------------+
| UPDATE_TIME |
+---------------------+
| 2024-03-27 09:39:05 |
+---------------------+
테이블명으로 확인
SELECT UPDATE_TIME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME='테이블명';
+---------------------+
| UPDATE_TIME |
+---------------------+
| 2024-03-27 09:39:05 |
+---------------------+
방법3. 직접 업데이트 시간 관리하기
CREATE TABLE test (
id INT PRIMARY KEY,
name CHAR(4),
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
KEY (update_time)
);
테스트 테이블 test가 생성하겠습니다.
test에는 id와 name, 업데이트 시간을 관리하는 update_time 컬럼이 있습니다.
INSERT INTO test(id, update_time) VALUES (1, NOW());
SELECT * FROM test;
+----+------+---------------------+
| id | name | update_time |
+----+------+---------------------+
| 1 | NULL | 2024-03-28 09:47:24 |
+----+------+---------------------+
위와같이 데이터를 넣으며 update_time을 관리해줍니다.
UPDATE test SET name = 'test' WHERE id = 1;
SELECT * FROM test;
+----+------+---------------------+
| id | name | update_time |
+----+------+---------------------+
| 1 | test | 2024-03-28 09:50:22 |
+----+------+---------------------+
UPDATE를 하면 자동으로 update_time이 갱신됩니다.
SELECT MAX(update_time) FROM test;
+---------------------+
| MAX(update_time) |
+---------------------+
| 2024-03-28 09:50:22 |
+---------------------+
테이블의 마지막 업데이트 시간을 보고싶으면 MAX 함수를 사용하여 확인할 수 있습니다.
마무리
잘못된 점이 있거나 궁금한 점이 있다면 언제든지 문의해주시기 바랍니다!