在MySQL的安装和初始化过程中,系统会自动创建一系列默认的系统表,这些表对于数据库的管理、性能监控、权限控制等方面起着至关重要的作用
本文将深入探讨MySQL中的默认表,揭示它们的结构、功能以及日常操作中的应用
一、MySQL默认表概述 在安装MySQL数据库时,系统会默认创建一系列的系统表,这些表主要存储在`information_schema`、`mysql`、`performance_schema`和`sys`这四个数据库中
这些系统表不仅为数据库管理员提供了丰富的管理和监控工具,还确保了数据库的安全性和稳定性
二、information_schema:元数据信息的宝库 `information_schema`是MySQL中一个特殊的系统数据库,它存储了关于数据库、表、列等元数据的信息
这些信息对于了解数据库的结构、属性以及进行数据库管理至关重要
-tables表:记录了数据库中所有表的信息,包括表名、存储引擎、行数等
-columns表:提供了关于表中列的信息,如列名、数据类型、最大长度、是否允许为空等
-schemata表:包含了数据库中所有模式(即数据库)的信息,如模式名、默认字符集等
通过查询`information_schema`中的这些表,管理员可以轻松获取数据库的详细结构和属性信息
例如,要查询所有数据库的名称和默认字符集,可以使用以下SQL语句: sql SELECT SCHEMA_NAME AS DatabaseName, DEFAULT_COLLATION_NAME AS Collation FROM information_schema.SCHEMATA; 同样,要查询指定数据库中的所有表及其存储引擎和行数,可以使用: sql SELECT TABLE_NAME AS TableName, ENGINE AS StorageEngine, TABLE_ROWS AS RowCount FROM information_schema.TABLES WHERE TABLE_SCHEMA = your_database_name; 三、mysql:用户与权限的核心 `mysql`数据库是MySQL中用于存储用户和权限信息的系统表
这些表对于管理数据库用户、授权和权限等方面至关重要
-user表:存储了所有用户的信息和权限设置,包括用户名称、主机、密码、各种权限标志等
-db表:用于存储数据库级别的权限,即哪些用户可以对哪些数据库执行哪些操作
-tables_priv表:管理表级权限,即哪些用户可以对哪些表执行哪些操作
-columns_priv表:进一步细化权限管理,允许在列级别上设置权限
通过查询`mysql`数据库中的这些表,管理员可以轻松地管理用户权限
例如,要查询所有用户的信息,可以使用: sql SELECT user, host FROM mysql.user; 要创建一个新用户并授予其权限,可以使用以下SQL语句: sql CREATE USER your_username@localhost IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON your_database_name- . TO your_username@localhost; FLUSH PRIVILEGES; 同样,要授予用户对特定表的特定权限,可以使用: sql GRANT SELECT, INSERT, UPDATE, DELETE ON your_database_name.your_table_name TO your_username@localhost; FLUSH PRIVILEGES; 四、performance_schema:性能监控的利器 `performance_schema`是MySQL中用于存储性能相关信息的系统数据库
它提供了一系列的表,用于查询和监控MySQL服务器的性能指标,从而帮助管理员了解数据库的运行状态和性能数据
-table_io_waits_summary_by_table表:记录了所有表的IO操作信息,包括读次数、写次数等
-threads表:提供了关于所有线程的状态信息,如线程ID、操作系统线程ID、进程列表ID、用户、主机、状态等
通过查询`performance_schema`中的这些表,管理员可以轻松地监控数据库的性能
例如,要查询所有表的IO操作信息,可以使用: sql 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; 同样,要查询所有线程的状态信息,可以使用: sql 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; 五、sys:元数据和性能信息的综合视图 `sys`数据库是MySQL8.0版本引入的新系统数据库,它建立在`information_schema`和`performance_schema`的基础上,提供了更方便和易读的方式来查询和操作MySQL服务器的元数据和性能信息
`sys`数据库中的表是更高层次的视图,它们结合了`information_schema`和`performance_schema`中的信息,为管理员提供了更直观的数据库管理和监控工具
-tables表:提供了数据库和表的大小信息,包括数据大小、索引大小、总大小等
-statement_analysis表:记录了慢查询日志的信息,包括事件时间、用户主机、SQL文本、等待时间等
通过查询`sys`数据库中的这些表,管理员可以轻松地获取数据库的元数据和性能信息
例如,要查询数据库和表的大小信息,可以使用: sql 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; 同样,要查询慢查询日志信息,可以使用: sql SELE