MySQL默认四张表

MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种Web应用程序中。在MySQL中,有四张默认的系统表,分别是:information_schema、mysql、performance_schema和sys。本文将介绍这四张表的作用和常用的查询操作。

1. information_schema表

information_schema是MySQL中用于存储数据库和表的元数据信息的系统数据库。它提供了一系列的表,用于查询和管理数据库的结构和属性。这些表包括tables、columns、schemata等。我们可以通过查询information_schema来获取数据库和表的详细信息。

查询所有数据库

SELECT SCHEMA_NAME AS DatabaseName,
       DEFAULT_COLLATION_NAME AS Collation
FROM information_schema.SCHEMATA;

查询指定数据库的所有表

SELECT TABLE_NAME AS TableName,
       ENGINE AS StorageEngine,
       TABLE_ROWS AS RowCount
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';

查询指定表的所有列

SELECT COLUMN_NAME AS ColumnName,
       DATA_TYPE AS DataType,
       CHARACTER_MAXIMUM_LENGTH AS MaxLength,
       IS_NULLABLE AS IsNullable
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
      AND TABLE_NAME = 'your_table_name';

2. mysql表

mysql表是MySQL中存储用户和权限信息的系统表,用于管理用户、授权和权限等。这些信息存储在mysql数据库中的user、db、tables_priv等表中。

查询所有用户

SELECT user,
       host
FROM mysql.user;

创建新用户

CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_username'@'localhost';
FLUSH PRIVILEGES;

授予用户权限

GRANT SELECT, INSERT, UPDATE, DELETE ON your_database_name.your_table_name TO 'your_username'@'localhost';
FLUSH PRIVILEGES;

3. performance_schema表

performance_schema是MySQL中用于存储性能相关信息的系统数据库。它提供了一系列的表,用于查询和监控MySQL服务器的性能指标。我们可以通过查询performance_schema来获取MySQL服务器的运行状态和性能数据。

查询所有表的IO操作

SELECT OBJECT_SCHEMA AS DatabaseName,
       OBJECT_NAME AS TableName,
       COUNT_READ AS ReadCount,
       COUNT_WRITE AS WriteCount
FROM performance_schema.table_io_waits_summary_by_table;

查询所有线程的状态

SELECT THREAD_ID AS ThreadId,
       THREAD_OS_ID AS OSThreadId,
       PROCESSLIST_ID AS ProcessId,
       PROCESSLIST_USER AS User,
       PROCESSLIST_HOST AS Host,
       PROCESSLIST_STATE AS State
FROM performance_schema.threads;

4. sys表

sys表是MySQL 8.0版本引入的新系统表,用于提供更方便和易读的方式来查询和操作MySQL服务器的元数据和性能信息。sys表是建立在information_schema和performance_schema基础上的更高层次的视图。

查询数据库和表的大小

SELECT table_schema AS DatabaseName,
       table_name AS TableName,
       sys.format_bytes(data_length) AS DataSize,
       sys.format_bytes(index_length) AS IndexSize,
       sys.format_bytes(data_length + index_length) AS TotalSize
FROM sys.tables;

查询慢查询日志

SELECT event_time AS EventTime,
       user_host AS UserHost,
       sql_text AS SqlText,
       timer_wait AS WaitTime
FROM sys.statement_analysis
WHERE schema_name = 'your_database_name'
      AND timer_wait > 0
ORDER BY timer_wait DESC;

以上是MySQL默认四张表的简要介绍和常用查询操作示例。这些表提供了丰富的元数据和性能信息,帮助我们更好地管理和优化MySQL数据库。在实际应用中,我们可以根据具体需求使用这些表进行数据分析、性能监控和故障排除。


关系图

下面是MySQL默认四张表的关系图:

erDiagram
    mysql.user ||--|| mysql.db
    mysql.user ||--|| mysql.tables_priv
    mysql.user ||--|| mysql.proxies_priv
    mysql.db ||--|| mysql.tables_priv
    mysql.tables_priv ||--|{ mysql.columns_priv

流程图

下面是查询指定表的所有列的流程图:

flowchart TD
    A[开始] --> B[连接数据库