默认情况下,我们show schemas;能看到几个数据库,是mysql系统自带的,有:
information_schema |
mysql |
performance_schema |
sys |
这些都是mysql系统自带的数据库。
其中information_schema数据库,里面是mysql数据库系统在工作时的存储的所有与mysql业务逻辑相关的数据。mysql的业务就是存储等处理我们用户的数据和操作。
里面有
具体什么意思呢,里面到底有哪些数据表,让我们来
use information_schema;
show tables;
查看一下这个库中的所有表吧!
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 |
ST_UNITS_OF_MEASURE |
STATISTICS |
TABLE_CONSTRAINTS |
TABLE_PRIVILEGES |
TABLES |
TABLESPACES |
TRIGGERS |
USER_PRIVILEGES |
VIEW_ROUTINE_USAGE |
VIEW_TABLE_USAGE |
VIEWS |
可以看到有很多表,这些表其中有些字眼我们很熟悉,比如几个表:tables(表),views(视图),triggers,schemata(数据库),statistics,files(数据库底层对应文件),events(事件),engines(引擎),columns(字段),keywords(sql代码关键字),plugins(插件)等。
用查询语句,可以查询到我们想要知道的mysql服务器的系统相关的数据。
比如我们可以查看一下tables表来查看一下整个这个mysql服务器的所有表:
use information_schema;
select * from tables;
查询出来就可以看到有很多条数据,能够知道这个sql服务器上有哪些表,你创建的表和mysql系统的表,都有,包含所有数据库的表,可以用where筛选出某个库的表。
字段有table_schema,table_name,table_type,create_time。很清晰。
现在我们再来查询一下columns表,查出一个我们的叫做plan的表中有哪些字段、以及字段的描述。
use information_schema;
select column_name,column_comment from columns
where table_name='plan' and table_schema='testapp'
语句执行后,就可以查出来 testapp数据库中 ->plan表中 -> 的 所有字段和字段的描述。
mysql库中,也有一些表。
其中我们一般比较关心的就是那个user表。user表中存储的是mysql数据库服务器的登录用户信息,里面是用户名、密码、密码加密方式、连接地址等字段。更改这个表中的mysql服务器登录帐号是可以生效的,比如改root帐号的密码,笔者以前试过。
performance_schema库,顾名思义,是mysql数据库系统运行时的性能数据。
MySQL WorkBench这个mysql客户端中,连接上服务器之后的服务器普通、性能状态显示,就是查询这个库中的数据实现的。
sys库,顾名思义,就很“内核”了。(就像Windows系统的system32目录一样内核,嘿嘿)
那么让我们来查询一下看一下里面究竟是什么内容。
有很多表,以及很多前缀带有$符号的表,应该是更加内核的表吧。
我挑了几个有趣的表查询了一下:host_summary,sys_config,session,version。
host_summary(似乎是所有连接进来的网络主机的概况,执行了多少个语句了,语句总共占了多少时间了,当前多少连接了等等诸如此类):
localhost | 2463 | 1.63 s | 662.28 us | 80 | 280 | 517.62 ms | 2 | 4 | 1 | 1.86 MiB | 128.08 MiB |
sys_config(系统配置,不晓得直接更改这个表能不能对mysql系统程序的配置生效):
diagnostics.allow_i_s_tables | OFF | 2019-03-29 23:58:05 | |
diagnostics.include_raw | OFF | 2019-03-29 23:58:05 | |
ps_thread_trx_info.max_length | 65535 | 2019-03-29 23:58:05 | |
statement_performance_analyzer.limit | 100 | 2019-03-29 23:58:05 | |
statement_performance_analyzer.view | 2019-03-29 23:58:05 | ||
statement_truncate_len | 64 | 2019-03-29 23:58:05 | |
session(看来mysql的实现架构也是有session这个概念的,为了性能而生):
48 | 8 | root@localhost | tian | Sleep | 16 | 0 ps | 0 | 0 | 0 | 0 | 0 | NO | 75.89 us | 415.66 KiB | 366.36 us | COMMITTED | YES | 3428 | MySQLWorkbench | ||||||||
49 | 9 | root@localhost | sys | Query | 0 | select * from session LIMIT 0, 1000 | 50.17 ms | 1.00 ms | 16896 | 0 | 0 | 4 | 0 | YES | 1.32 MiB | 49.54 ms | ACTIVE | YES | 3428 | MySQLWorkbench | |||||||
44 | 4 | sql/event_scheduler | Sleep | Waiting on empty queue | NO | 16.42 KiB |
version(很简单,就mysql的版本):
2.0.0 | 8.0.15 |
作为基本的库表操作级别的人物,我觉得还是不要改这个库里面的数据为好。除非你哪天对某个表的数据更改有所想法,想要实验实验观察结果总结方法,这也倒可以有~~
我觉的这些内核的数据库,在数据库大佬手里应该是有很多精通级的奇端操作的,但我们小白不懂就还是查询查询,做些简单的修改密码的操作吧~~。
这么看来,也就是说,MySql数据库系统程序自身也使用自身的数据库功能进行存储自身程序运行时的数据。
mysql系统的数据库和表的,建议不要随意更改它的数据,查查就行了,免得把mysql搞崩,运行出错就不好了。