INFORMATION SCHEMA

※Nội dung bài tìm hiểu này được thực hiện trên phiên bản MySQL 8.0

Ở các bài viết trước, chúng ta đã lần lượt tìm hiểu cách tạoxóa DB trong MySQL, và để kiểm tra xem DB đã được tạo hay xóa chưa, chúng ta thường sử dụng lệnh SHOW DATABASES như bên dưới.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.13 sec)

Nếu để ý thì mọi người sẽ nhận thấy rằng trong các hệ thống MySQL, bên cạnh các database do người dùng tạo, luôn có sự tồn tại của các database: INFORMATION_SCHEMA, MYSQL, PERFORMANCE_SCHEMASYS. Vậy vai trò của các database này là gì? Chúng ta sẽ lần lượt tìm hiểu về các database này, ở bài viết này chúng ta sẽ bắt đầu với information_schema.

1. Giới thiệu

INFORMATION_SCHEMA là 1 database nằm bên trong 1 máy chủ MySQL, lưu thông tin về tất cả các database khác mà máy chủ MySQL đang lưu giữ.

INFORMATION_SCHEMA chứa các table read-only. Chúng thực chất là các view, chứ không phải các table thực sự, do đó không có file nào liên kết với chúng, và chúng ta không thể đặt trigger lên các table này. Ngoài ra thì không có thư mục của database này trong máy chủ MySQL.

Vì các table trong database này là read-only, nên chúng ta chỉ có thể sử dụng lệnh SELECT trên chúng, các lệnh INSERT, UPDATE và DELETE sẽ không chạy được trên database này.

Ví dụ:

mysql> use information_schema;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLLATIONS                            |
| COLUMN_PRIVILEGES                     |
| COLUMN_STATISTICS                     |
| COLUMNS                               |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| INNODB_BUFFER_PAGE                    |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_CACHED_INDEXES                 |
| INNODB_CMP                            |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_CMP_RESET                      |
| INNODB_CMPMEM                         |
| INNODB_CMPMEM_RESET                   |
| INNODB_COLUMNS                        |
| INNODB_DATAFILES                      |
| INNODB_FIELDS                         |
| INNODB_FOREIGN                        |
| INNODB_FOREIGN_COLS                   |
| INNODB_FT_BEING_DELETED               |
| INNODB_FT_CONFIG                      |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_DELETED                     |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_INDEXES                        |
| INNODB_METRICS                        |
| INNODB_SESSION_TEMP_TABLESPACES       |
| INNODB_TABLES                         |
| INNODB_TABLESPACES                    |
| INNODB_TABLESPACES_BRIEF              |
| INNODB_TABLESTATS                     |
| INNODB_TEMP_TABLE_INFO                |
| INNODB_TRX                            |
| INNODB_VIRTUAL                        |
| KEY_COLUMN_USAGE                      |
| KEYWORDS                              |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| RESOURCE_GROUPS                       |
| ROUTINES                              |
| SCHEMA_PRIVILEGES                     |
| SCHEMATA                              |
| ST_GEOMETRY_COLUMNS                   |
| ST_SPATIAL_REFERENCE_SYSTEMS          |
| STATISTICS                            |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TABLES                                |
| TABLESPACES                           |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEW_ROUTINE_USAGE                    |
| VIEW_TABLE_USAGE                      |
| VIEWS                                 |
+---------------------------------------+
65 rows in set (0.09 sec)

Chỉ có lệnh SELECT là chạy được trên database INFORMATION_SCHEMA.

mysql> SELECT table_name, table_type, engine FROM information_schema.tables ORDER BY table_name LIMIT 10;
+---------------------------------------+-------------+-------------------+
| TABLE_NAME                            | TABLE_TYPE  | ENGINE            |
+---------------------------------------+-------------+-------------------+
| accounts                              | BASE TABLE  | PERFORMANCE_SCHEMA|
| CHARACTER_SETS                        | SYSTEM VIEW | NULL              |
| COLLATION_CHARACTER_SET_APPLICABILITY | SYSTEM VIEW | NULL              |
| COLLATIONS                            | SYSTEM VIEW | NULL              |
| COLUMN_PRIVILEGES                     | SYSTEM VIEW | NULL              |
| COLUMN_STATISTICS                     | SYSTEM VIEW | NULL              |
| COLUMNS                               | SYSTEM VIEW | NULL              |
| columns_priv                          | BASE TABLE  | InnoDB            |
| component                             | BASE TABLE  | InnoDB            |
| cond_instances                        | BASE TABLE  | PERFORMANCE_SCHEMA|
+---------------------------------------+-------------+-------------------+
10 rows in set (0.01 sec)

Các lệnh INSERT, UPDATE, DELETE sẽ không chạy được trên database này.

mysql> UPDATE information_schema.tables 
-> SET ENGINE='Test_Engine' 
-> WHERE table_name='CHARACTER_SETS';
 ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'

2. Các table của INFORMATION_SCHEMA

Như đã trình bày ở trên, INFORMATION_SCHEMA lưu trữ thông tin về các database đang có trong MySQL, các thông tin này được lưu trữ trong các table được liệt kê ở trong bảng bên dưới.

No.TableDescription
1CHARACTER_SETSCung cấp thông tin về các character set hiện có.
2COLLATIONSCung cấp thông tin về các collation của từng character set.
3COLLATION_CHARACTER_SET_APPLICABILITYCho biết character set nào có thể áp dụng cho collation nào.
4COLUMNSCung cấp thông tin về các column trong các table.
5COLUMN_PRIVILEGESCung cấp thông tin phân quyền trên các column.
6COLUMN_STATISTICSCung cấp thông tin truy cập đến các thống kê biểu đồ cho các giá trị của column.
7ENGINESCung cấp thông tin về các storage engine, rất hữu dụng trong việc kiểm tra xem storage engine nào đang được hỗ trợ, và storage engine mặc định là engine nào.
8EVENTSCung cấp thông tin về các sự kiện trong Event Manager.
9FILES Cung cấp thông tin về các file nơi dữ liệu không gian bảng của MySQL được lưu trữ.
Cung cấp thông tin về các tập tin dữ liệu của InnoDB.
10KEY_COLUMN_USAGEMô tả các column là khóa (key) của table. Table này không cung cấp thông tin về các thành phần khóa mà chỉ cung cấp thông tin về column.
11KEYWORDS Liệt kê các từ được xem là keyword trong MySQL.
12OPTIMIZER_TRACECung cấp thông tin được tạo bởi khả năng theo dõi của trình tối ưu hóa cho các câu lệnh được theo dõi. Để bật chức năng theo dõi, sử dụng biến hệ thống optimizer_trace.
13PARAMETERS Cung cấp thông tin về các parameter cho các stored procedure và stored function, và giá trị trả về cho các stored function.
14PARTITIONS Cung cấp thông tin về các phân vùng (partition) của table. Mỗi row trong table này ứng với 1 phân vùng cụ thể hay phân vùng phụ (subpartition) của 1 table.
15PLUGINS Cung cấp thông tin về các plugin của server.
16PROCESSLIST Cung cấp thông tin về thread đang chạy.
17PROFILING Cung cấp thông tin hồ sơ của các lệnh trong MySQL.
Cung cấp thông tin chỉ ra việc sử dụng tài nguyên cho các lệnh được thực thi trong suốt quá trình của session hiện tại.
18REFERENTIAL_CONSTRAINTS Cung cấp thông tin về các khóa ngoại (foreign key)
19RESOURCE_GROUPSCung cấp truy cập đến thông tin về các nhóm tài nguyên (resource group) trong MySQL.
20ROUTINES Cung cấp thông tin về các stored procedure và function.
21SCHEMATA Cung cấp thông tin về các database.
22SCHEMA_PRIVILEGESCung cấp thông tin phân quyền của các database.
23STATISTICS Cung cấp thông tin về các chỉ mục (index) của table.
24ST_GEOMETRY_COLUMNS Cung cấp thông tin về các column lưu trữ dữ liệu không gian (spatial data).
25ST_SPATIAL_REFERENCE_SYSTEMSCung cấp thông tin các hệ thống tham chiếu có sẵn cho dữ liệu không gian.
26ST_UNITS_OF_MEASURE Cung cấp thông tin về các đơn vị (unit) được chấp nhận trong function ST_Distance().
27TABLES Cung cấp thông tin về các table trong các database hiện có trong server.
28TABLESPACES Cung cấp thông tin về tablespace đang hoạt động của MySQL Cluster.
29TABLE_CONSTRAINTSMô tả những table nào có ràng buộc (constraint)
30TABLE_PRIVILEGESCung cấp thông tin phân quyền của các table.
31TRIGGERS Cung cấp thông tin về các trigger.
32USER_PRIVILEGESCung cấp thông tin phân quyền của toàn bộ MySQL.
33VIEWS Cung cấp thông tin về các view trong các database.
34VIEW_ROUTINE_USAGECung cấp truy cập đến các thông tin về các stored function được sử dụng trong định nghĩa view.
35VIEW_TABLE_USAGECung cấp truy cập đến thông tin về các table và view được sử dụng trong định nghĩa view.

Ngoài các table trên, trong INFORMATION_SCHEMA còn có các table lưu trữ các thông tin dành riêng cho các table của InnoDB. Chúng ta có thể dễ dàng nhận ra các table này do chúng có tiền tố INNODB_ đứng ở đầu ở tên table. Trong các bài viết tìm hiểu về INNODB, chúng ta sẽ lần lượt tìm hiểu về chức năng của các table này.

Chúng ta kết thúc bài tìm hiểu về INFORMATION_SCHEMA tại đây. Qua bài viết này, chúng ta đã có được cái nhìn khái quát về vai trò, thành phần và chức năng của database này trong hệ thống MySQL. Ở các bài viết sau, chúng ta sẽ tiếp tục tìm hiểu về các database khác trong MySQL.

Chúc các bạn thành công!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.