• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

互联网 diligentman 7天前 8次浏览

文章目录

    • 前言 ´・ᴗ・`
    • Mysql目录
    • 视图view
    • information_schema数据库
    • mysql
    • 总结 ´◡`

前言 ´・ᴗ・`

  • 继上一次我们学习了事务的处理 控制语言 TCL
  • 本节内容开始 将学习Mysql一些所谓的高级的内容
  • 本节将会帮助你了解…

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

Mysql目录

首先一个误区(好吧我也犯这个错误)
Mysql配置文件并不在安装目录里面 如图 C:Program FilesMySQLMySQL Server 5.7
数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
而是在C:ProgramDataMySQLMySQL Server 5.7
数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
这里才是存我们感兴趣的数据存储的地方(mysql是持久化的 将信息编码转为文件 存到文件系统的数据库 与redis存到内存不同) 以及配置的地方 而软件目录不过是执行程序存在的地方 换个版本就没了

那么我们试着连接数据库 可见原来就存在4个数据库 如下:
数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
有意思的是,我们只能找到三个数据库的持久化文件:
数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
所以information_schema去哪了?这个数据库抽象起来就是数据库 但实际实现形式是视图(view),而不是平常我们常见的基本表(具有实体的表),因此,文件系统上没有与之相关的文件相对应。

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

视图view

数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
我们看到这里也有视图二字 其实他确实可以用sql语句创建,而且平常我们就在和类似视图的东西打交道 比如:

我们用 查询一个实体表的所有栏位的所有记录
SELECT* FROM events_stages_summary_by_host_by_event_name;
数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
查询出来的结果就可以称为视图,
如果多表查询呢?一样 所有查出来的结果你可以理解为是视图

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

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

因为性能

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

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

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

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

information_schema数据库

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

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

具体来说:

  • SCHEMATA表:提供了当前mysql实例中所有数据库的信息。这就是show databases的结果
    数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
    数据库学习之MySQL (二十八)——mysql目录、配置、初始自带数据库(一)
    可见 我们常见的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 (二十八)——mysql目录、配置、初始自带数据库(一)

总结 ´◡`

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

  • 本文专栏
    MySQL专栏
  • 我的其他专栏 希望能够帮到你 ( •̀ ω •́ )✧
    • 手把手带你学后端(服务端)
    • python这么火 想要深入学习python 玩一下简单的应用嘛?
      python应用
  • 谢谢大佬支持! 萌新有礼了:)

喜欢 (0)