MySQL 元数据
MySQL 元数据是关于数据库和其对象(如表、列、索引等)的信息。
元数据存储在系统表中,这些表位于 MySQL 数据库的 information_schema 数据库中,通过查询这些系统表,你可以获取关于数据库结构、对象和其他相关信息的详细信息
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| php |
| robomaster |
| sys |
+--------------------+
6 rows in set (0.01 sec)
MySQL以下三种信息:
- 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数
- 数据库和数据表的信息: 包含了数据库及数据表的结构信息
- MySQL 服务器信息: 包含了数据库服务器的当前状态,版本号等
在 MySQL 的命令提示符中,我们可以很容易的获取以上服务器信息
information_schema 数据库
information_schema 是 MySQL 数据库中的一个系统数据库,它包含有关数据库服务器的元数据信息,这些信息以表的形式存储在 information_schema 数据库中
SCHEMATA 表
存储有关数据库的信息,如数据库名、字符集、排序规则等
SELECT * FROM information_schema.SCHEMATA;
结果:
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| def | mysql | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
| def | information_schema | utf8mb3 | utf8mb3_general_ci | NULL | NO
|
| def | performance_schema | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
| def | sys | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
| def | php | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
| def | robomaster | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
6 rows in set (0.00 sec)
TABLES 表
包含有关数据库中所有表的信息,如表名、数据库名、引擎、行数等
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'robomaster';
结果:
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| def | robomaster | test | BASE TABLE | InnoDB | 10 | Dynamic | 0 |
0 | 16384 | 0 | 0 | 0 | NULL | 2024-04-28 16:57:28 | 2024-04-28 17:20:00 | NULL | utf8mb4_0900_ai_ci | NULL | | |
| def | robomaster | test_username | BASE TABLE | InnoDB | 10 | Dynamic | 2 | 8192 | 16384 | 0 | 0 | 0 | NULL | 2024-04-28 21:19:40 | 2024-04-28 21:22:42 | NULL | utf8mb4_0900_ai_ci | NULL | | |
| def | robomaster | username | BASE TABLE | InnoDB | 10 | Dynamic | 2 | 8192 | 16384 | 0 | 0 | 0 | NULL | 2024-04-28 17:57:18 | NULL
| NULL | utf8mb4_0900_ai_ci | NULL | | |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
3 rows in set (0.01 sec)
COLUMNS 表
包含有关表中列的信息,如列名、数据类型、是否允许 NULL 等
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'robomaster' AND TABLE_NAME = 'username';
结果:
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+--------------------+--------------+------------+-------+---------------------------------+----------------+-----------------------+--------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | COLUMN_COMMENT | GENERATION_EXPRESSION | SRS_ID |
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+--------------------+--------------+------------+-------+---------------------------------+----------------+-----------------------+--------+
| def | robomaster | username | id | 1 | NULL | YES | int | NULL | NULL | 10 | 0 | NULL | NULL | NULL | int | | | select,insert,update,references | | | NULL |
| def | robomaster | username | Username | 2 | NULL | NO | varchar | 255 | 1020 | NULL | NULL | NULL | utf8mb4 | utf8mb4_0900_ai_ci | varchar(255) | PRI | | select,insert,update,references | | | NULL |
| def | robomaster | username | Password | 3 | NULL | YES | varchar | 255 | 1020 | NULL | NULL | NULL | utf8mb4 | utf8mb4_0900_ai_ci | varchar(255) | | | select,insert,update,references | | | NULL |
+---------------+--------------+------------+-------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+--------------------+--------------+------------+-------+---------------------------------+----------------+-----------------------+--------+
3 rows in set (0.00 sec)
STATISTICS 表
提供有关表索引的统计信息,如索引名、列名、唯一性等
SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'robomaster' AND TABLE_NAME = 'username';
结果:
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | NON_UNIQUE | INDEX_SCHEMA | INDEX_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULLABLE | INDEX_TYPE | COMMENT | INDEX_COMMENT | IS_VISIBLE | EXPRESSION |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| def | robomaster | username | 0 | robomaster | PRIMARY | 1 | Username | A | 2 | NULL | NULL | | BTREE | | | YES | NULL |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
1 row in set (0.00 sec)
KEY_COLUMN_USAGE 表
包含有关表中外键的信息,如外键名、列名、关联表等
SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'robomaster' AND TABLE_NAME = 'username';
结果:
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | NON_UNIQUE | INDEX_SCHEMA | INDEX_NAME | SEQ_IN_INDEX | COLUMN_NAME | COLLATION | CARDINALITY | SUB_PART | PACKED | NULLABLE | INDEX_TYPE | COMMENT | INDEX_COMMENT | IS_VISIBLE | EXPRESSION |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
| def | robomaster | username | 0 | robomaster | PRIMARY | 1 | Username | A | 2 | NULL | NULL | | BTREE | | | YES | NULL |
+---------------+--------------+------------+------------+--------------+------------+--------------+-------------+-----------+-------------+----------+--------+----------+------------+---------+---------------+------------+------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'robomaster' AND TABLE_NAME = 'username';
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | POSITION_IN_UNIQUE_CONSTRAINT | REFERENCED_TABLE_SCHEMA | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| def | robomaster | PRIMARY | def | robomaster | username | Username | 1 | NULL | NULL | NULL | NULL
|
+--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
1 row in set (0.00 sec)
REFERENTIAL_CONSTRAINTS 表
存储有关外键约束的信息,如约束名、关联表等
SELECT * FROM information_schema.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = 'robomaster' AND TABLE_NAME = 'username';
结果:
+--------------------+-------------------+-----------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+------------+-----------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | UNIQUE_CONSTRAINT_CATALOG | UNIQUE_CONSTRAINT_SCHEMA | UNIQUE_CONSTRAINT_NAME | MATCH_OPTION | UPDATE_RULE | DELETE_RULE | TABLE_NAME | REFERENCED_TABLE_NAME |
+--------------------+-------------------+-----------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+------------+-----------------------+
| def | robomaster | fk_id | def | robomaster | NULL | NONE | NO ACTION | NO ACTION | username | test |
+--------------------+-------------------+-----------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+------------+-----------------------+
1 row in set (0.00 sec)