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

MySQL에서 생성 날짜 기준으로 데이터베이스 목록 정렬하여 조회하는 방법

MySQL에서 생성 날짜 기준으로 데이터베이스 목록 정렬하기

MySQL에서 SHOW DATABASES 명령어는 데이터베이스 목록을 항상 알파벳 순서로 출력하며, 생성 날짜 정보는 함께 제공되지 않습니다. 따라서 데이터베이스를 생성 시점 기준으로 정렬해서 확인하려면 INFORMATION_SCHEMA.TABLES 뷰와 ORDER BY 절을 조합한 별도의 쿼리가 필요합니다.

1단계: 전체 데이터베이스 목록 확인

먼저 서버에 존재하는 모든 데이터베이스를 조회해 보겠습니다.

mysql> show databases;

실행하면 아래와 같이 이름순으로 정렬된 30개의 데이터베이스가 출력됩니다.

+---------------------------+
| Database                  |
+---------------------------+
| bothinnodbandmyisam       |
| business                  |
| commandline               |
| customer_tracker_database |
| customertracker           |
| database1                 |
| databasesample            |
| demo                      |
| education                 |
| hb_student_tracker        |
| hello                     |
| information_schema        |
| javadatabase2             |
| javasampledatabase        |
| mybusiness                |
| mydatabase                |
| mysql                     |
| onetomanyrelationship     |
| performance_schema        |
| rdb                       |
| sample                    |
| sampledatabase            |
| schemasample              |
| sys                       |
| test                      |
| test3                     |
| tracker                   |
| universitydatabase        |
| web                       |
| webtracker                |
+---------------------------+
30 rows in set (0.00 sec)

2단계: 생성 날짜 기준 정렬 쿼리 작성

데이터베이스별 생성 및 수정 시간은 INFORMATION_SCHEMA.TABLES에 저장된 메타데이터에서 확인할 수 있습니다. 아래 쿼리는 데이터베이스 이름별로 그룹화한 뒤, 가장 최근의 테이블 생성 시간(CREATE_TIME)을 기준으로 내림차순 정렬합니다.

mysql> SELECT
    -> TABLE_SCHEMA AS ALL_DATABASE_NAME,
    -> MAX(create_time) AS creationTime,
    -> MAX(update_time) updatingTime
    -> FROM INFORMATION_SCHEMA.TABLES
    -> GROUP BY ALL_DATABASE_NAME
    -> ORDER BY creationTime DESC;

쿼리 구성 요소 살펴보기

  • TABLE_SCHEMA AS ALL_DATABASE_NAME – 스키마(데이터베이스) 이름을 의미합니다.
  • MAX(create_time) AS creationTime – 해당 데이터베이스 안에서 테이블이 마지막으로 생성된 시간입니다.
  • MAX(update_time) AS updatingTime – 테이블이 마지막으로 수정된 시간입니다.
  • GROUP BY ALL_DATABASE_NAME – 데이터베이스 단위로 결과를 묶습니다.
  • ORDER BY creationTime DESC – 생성 시간을 내림차순, 즉 최신순으로 정렬합니다.

쿼리를 실행하면 다음과 같이 최근에 생성된 데이터베이스부터 순서대로 출력됩니다.

+---------------------+---------------------+---------------------+
| ALL_DATABASE_NAME   | creationTime        | updatingTime        |
+---------------------+---------------------+---------------------+
| test                | 2019-04-03 11:37:58 | 2019-04-03 11:38:55 |
| hb_student_tracker  | 2019-03-19 03:54:32 | NULL                |
| sample              | 2019-03-15 00:04:29 | 2019-03-08 16:06:09 |
| test3               | 2019-03-12 20:29:12 | NULL                |
| mysql               | 2019-02-26 07:10:49 | 2019-04-03 11:38:56 |
| demo                | 2019-02-19 03:27:40 | NULL                |
| tracker             | 2019-02-14 19:49:55 | NULL                |
| bothinnodbandmyisam | 2019-02-06 14:32:26 | 2019-02-05 18:11:14 |
| commandline         | 2019-01-30 21:21:56 | NULL                |
| rdb                 | 2019-01-03 19:37:43 | NULL                |
| business            | 2019-01-02 17:32:17 | 2018-12-10 17:53:02 |
| education           | 2018-10-06 15:07:29 | NULL                |
| information_schema  | 2018-09-23 02:09:14 | NULL                |
| sys                 | 2018-09-23 02:09:03 | NULL                |
| performance_schema  | 2018-09-23 02:08:01 | NULL                |
+---------------------+---------------------+---------------------+
15 rows in set (0.05 sec)

알아두면 좋은 점

  • 테이블이 하나도 없는 빈 데이터베이스는 INFORMATION_SCHEMA.TABLES에 기록이 없기 때문에 이 쿼리 결과에는 나타나지 않습니다.
  • InnoDB 테이블은 UPDATE_TIME을 추적하지 않으므로 해당 열이 NULL로 표시될 수 있습니다.
  • 오래된 데이터베이스부터 보고 싶다면 DESC 대신 ASC(오름차순)를 사용하면 됩니다.
  • MAX(create_time)은 데이터베이스 자체의 생성 시각이 아니라, 그 안의 테이블 생성 시각 중 가장 최근 값을 기준으로 한다는 점을 유의하세요.