数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)

前言 ´・ᴗ・`

  • 继上一次我们学习了事务的处理 控制语言 TCL
  • 本节内容开始 将学习Mysql一些所谓的高级的内容
  • 本节将会帮助你了解…
    • Mysql目录有哪些 目录与初始数据库简单对应关系
    • 视图的概念
    • information_schema数据库
    • mysql数据库

注意 mysql5.6自带数据库有个test 而到了mysql5.7改名为sys

Mysql目录

首先一个误区(好吧我也犯这个错误)
Mysql配置文件并不在安装目录里面 如图 C:\Program Files\MySQL\MySQL Server 5.7
在这里插入图片描述
而是在C:\ProgramData\MySQL\MySQL Server 5.7
在这里插入图片描述
这里才是存我们感兴趣的数据存储的地方(mysql是持久化的 将信息编码转为文件 存到文件系统的数据库 与redis存到内存不同) 以及配置的地方 而软件目录不过是执行程序存在的地方 换个版本就没了

那么我们试着连接数据库 可见原来就存在4个数据库 如下:
在这里插入图片描述
有意思的是,我们只能找到三个数据库的持久化文件:
在这里插入图片描述
所以information_schema去哪了?这个数据库抽象起来就是数据库 但实际实现形式是视图(view),而不是平常我们常见的基本表(具有实体的表),因此,文件系统上没有与之相关的文件相对应。

所以**视图是啥?**为啥很少听说呢?不常用呢?

视图view

在这里插入图片描述
我们看到这里也有视图二字 其实他确实可以用sql语句创建,而且平常我们就在和类似视图的东西打交道 比如:

我们用 查询一个实体表的所有栏位的所有记录
SELECT* FROM events_stages_summary_by_host_by_event_name;
在这里插入图片描述
查询出来的结果就可以称为视图,
如果多表查询呢?一样 所有查出来的结果你可以理解为是视图

这就是为啥视图没有实体 他是根据别的实体 经过处理(查询操作 加密等)即时运算出来的 而不是本身具有实体存在文件中的

那么下一个问题 这玩意平常查看数据库 用的挺多的啊 不见我们用语句创建视图 使用视图呢?

因为性能

事实上当sql在操作视图时,所有数据都是从其他实体表中查出来的,使用视图并不能优化查询速度。尤其视图一般要发挥作用,自然是要实现多表查询,但是不同表的索引不一定相同,这样会衍生很多问题,牵一发而动全身,表与表之间反而耦合度增加,业务代码写起来很不方便,还降低性能,意义不大(除了方便理解?)

另外,由于数据库软件如mysql将其抽象得和普通实体表一样,无论是操作还是查看的结果,因此在业务代码中我们无法通过sql区分表和视图,这样优化也变得很困难。

当然,视图在特定场合,可以提升一定性能,但是很难把握,感觉我们这些普通人还是别尝试了2333

最后,很蛋疼的是,在mysql的优化器中,视图的代码执行路径与实体表完全不同,无法直观的预测其执行性能

information_schema数据库

那这个information_schema到底有什么作用呢?
它提供了访问数据库元数据的方式

元数据,关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。

具体来说:

  • SCHEMATA表:提供了当前mysql实例中所有数据库的信息。这就是show databases的结果
    在这里插入图片描述
    在这里插入图片描述
    可见 我们常见的mysql命令 其来源就是源于这些information_schema视图 当然做了一定的裁剪

  • TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。对应show tables from schemaname命令

  • COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。对应show columns from schemaname.tablename命令

  • STATISTICS表:提供了关于表索引的信息。对应show index from schemaname.tablename命令

  • USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。

  • SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。

  • TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。

  • COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

  • CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。SHOW CHARACTER SET

  • COLLATIONS表:提供了关于各字符集的对照信息。

  • COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。SHOW COLLATION

  • TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。

  • KEY_COLUMN_USAGE表:描述了具有约束的键列。

  • ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

  • VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。

  • TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表

mysql

mysql库就是mysql的核心数据库
我们看到,前面的information_schema视图 很多信息又是来源于mysql表 这个表的信息更加根本 是所有配置的根本来源之一,而information_schema可以理解为对mysql的信息进一步处理,封装,使得信息更加人性化(之后自然封装成函数命令来给我们用了)

mysq库主要负责存储数据库的用户、权限设置,以及我们所用的关键字等等,也就是mysql自己需要使用的控制和管理核心信息。而我们常用的,也就是在mysql.user表中修改root用户的密码

有意思的是 mysql还有这两张表:innodb_index_statsinnodb_table_stats 他们的作用和innodb有关:

具体来说,InnoDB 存储引擎提供了两种存储统计数据的方式:持久化(PERSISTENT)与非持久化统计数据(TRANSIENT)

  • 持久化(PERSISTENT)统计数据,存储在 mysql.innodb_index_stats 和 mysql.innodb_table_stats 表中。这种统计数据存储在磁盘上 持久化了(mysql是实体库)

  • 非持久化(TRANSIENT)统计数据,存储在 information_schema.statistics 和 information_schema.tables 中。这种统计数据存储在内存中,当服务器关闭时这些这些统计数据就都被清除掉了,等到服务器重启之后,在某些适当的场景下才会重新收集这些统计数据。

目前持久化的存储统计数据是主流 mysql默认也是持久化的

不过除了dba 貌似没什么人关注mysql库各个表的功能 资料很少
有兴趣的兄弟可以研究一下 我也就碰到问题再解决他们吧
在这里插入图片描述

总结 ´◡`

Mysql目录有哪些 目录与初始数据库简单对应关系
视图的概念
information_schema数据库
mysql数据库

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值