Python社区  »  DATABASE

mysql入门指引(一):mysql到底是什么

oatlmy • 5 天前 • 22 次点击  

前言

作为 mysql 的入门指引,本篇不涉及技术细节,而是从另外的角度来讨论。当我自己回过头来看 mysql 时,我最想知道的并不是mysql的原理,而是 mysql 的发展历史,或者说是数据库的发展历史。

现在,保持空杯心态,回到当初第一次调研某项技术的时候,来看看我们首先该调研点什么?

  1. Mysql 是什么?
  2. 其发展历史是什么,也就是解决了什么问题
  3. 适用场景
  4. 基本构成
  5. 核心原理在哪里
  6. 相似的技术还有哪些?他们之间相比有什么区别?

当这些知道了以后,也就是站在宏观的高度做到了心中有数,然后再去深入细节,从而避免低效的学习。

mysql 发展了这么久,社区已经非常丰富了,所以我们主要的参考资料就是官网文档或者专业的网站。这里补充一个小插曲,我一开始接触 社区 这个词,还以为每个技术都有一个论坛叫做社区的,搞了半天才知道,所谓的社区丰富指的是:官网网站及各大平台对该技术点的讨论或者使用或者二次开源等非常多。

mysql是什么

mysql是数据库

mysql首先是一个数据库,那么什么是数据库呢?我觉得甲骨文这个描述的就很到位。

数据库是 结构化信息 或数据的有组织的集合,通常以电子方式存储在计算机系统中。数据库通常由 数据库管理系统 (DBMS) 来控制。数据、DBMS 及其关联应用一起被称为数据库系统,通常简称为数据库。

​ 引自 甲骨文官网

自然而然,我们要问:结构化数据又是什么???要清楚的理解,需要来看一组对比:

非结构化数据: 比如文本数据、视频数据等

半结构化数据: 比如JSON格式的数据,html文档等

结构化数据: 比如mysql中存储的每行数据

也就是说,结构化数据是有固定的字段,并且字段的数值类型也是固定的。而 JSON 之所以叫做半结构化数据,是因为他的字段数值类型不是固定的。

再来看后半句: 数据、DBMS 及其关联应用一起被称为数据库系统,通常简称为数据库 ,所以 Mysql 就是一款数据管理系统,即DBMS,再辅助上存储的数据和其生态应用,统称为 Mysql 数据库。再来看下 MySQL 的官网介绍:

MySQL, the most popular Open Source SQL database management system

也就是 mysql 是开源的,SQL数据库管理系统。

但是我们上面的表述有些矛盾,即说 mysql 是数据库,而数据库又是结构化信息或数据的有组织的集合;但是我们又解释结构化数据是 比如mysql中存储的数据。等于说了废话。

所以这里先留一个疑惑,到底什么是结构化数据,它和mysql的关系是什么?我们下面还会谈到。

mysql是关系型数据库

其次,Mysql 是关系型数据库。这里就很有意思了,重点在于 关系 ,第一次看关系的时候容易满头雾水。我们不妨换个角度来看看关系,从果到因。这里先放一张图,后面再做说明:

在这里插入图片描述

我们来看一张抽象一点的表:

x y z
1 a A
2 b B

对于这张表,我们将 (x,y,z) 看成是一个集合,而 (1,a,A) 和 (2,b,B)就是这个集合中的元素。所以 x 的取指范围就是 1,2;y的取值范围就是 a,b;z 的取值范围就是 A,B。

通过将每张表看成是一个集合,也就是更抽象一层,我们就能够利用集合中的交并补等运算来进行操作,也就是将具体的数据表上升到了数学理论的高度。

这个数学理论就是集合论,而关系型数据库的理论基础就是集合论。我们执行的各种增删改查操作,实际上都可以抽象的看成是对于集合(关系)的各种操作。

理论中的 关系(即集合) 对应的就是数据表,元组对应的就是每条记录,域对应的就是每列字段。这些概念不需要管他,但是要知道数据库是基于这样的理论基础的。

所以基于这样理论基础的数据库就叫做关系型数据库。常看到关系表,表结构这样的字眼,但是这种数据库其底层存储并不是什么 关系表 这样的。

那么, 关系 这个词并不代表数据库的存储结构。而是代表 我们在操作这些数据的时候,把这些数据看成是一个个集合,然后用集合之间的运算执行操作,只是这些操作或者这些数据与集合的对应是有着坚实的数学理论基础 。这是关系型数据库的精髓。

基于上面的分析,有三个重点还要提一下:

  1. x的取指范围是1,2;为什么叫x列为一个域呢?也就是一个数据域,同一个域的数据类型是相同的;x列的每个值其要么都是整数,要么都是字符串或者其他。
  2. 正是因为底层的理论基础存在,我们将表看成集合(关系)。所以多表间的操作叫做连接,存在各种JOIN操作,这就是底层数据模型的反映。
  3. 集合之间的运算还有一个很重要的,就是笛卡尔积,他也是各种JOIN的理论基础,后面我们会再次谈到。

再回到上文的问题,结构化数据和Mysql的关系是什么?我们看到了mysql的表结构,每个表都是n元的集合,每个 其表示名称是固定的,而且每个 的数据类型也是固定的,所以可以把每一行数据看成是结构化的数据。

再回到这张图:
在这里插入图片描述

经过集合论和关系模型的转换,我们不需要管底层的物理存储是怎么实现的怎么存储的,仅仅需要关注的是关系表结构。我们的一系列操作就是对于这些表的各种操作,屏蔽了底层的细节。

mysql就是mysql

最后,mysql就是mysql。也就是Mysql是数据库、关系型数据库的子集。但是mysql有自己独有的特性。这些特性又是什么呢?

从官方文档中摘录几个重要的特性,以前或者后续碰到的:

  • Uses multi-layered server design with independent modules. 同样是分层思想的体现
  • Provides transactional and nontransactional storage engines. 两个关键词:事务、存储引擎
  • Executes very fast joins using an optimized nested-loop join. 关键词:嵌套循环关联
  • An EXPLAIN statement to show how the optimizer resolves a query. 关键词:explain语句
  • The Connector/J interface provides MySQL support for Java client programs that use JDBC connections JDBC连接采用的是 Connector/J 接口
  • These include both command-line programs such as mysqldump and mysqladmin , and graphical programs such as MySQL Workbench . 关键词:一些工具
  • MySQL Server has built-in support for SQL statements to check, optimize, and repair tables. These statements are available from the command line through the mysqlcheck 关键词:mysqlcheck 工具集
  • MySQL programs can be invoked with the --help or -? option to obtain online assistance 可以使用 --help 来访问在线助手

从这些特性可以看出,一个成功的软件不仅仅是本身功能设计的成功,还要保持可扩展性,以及运维方案、帮助文档、工具等等。真正的将软件变成一整个生态。

参考资料:

  • mysql官网
  • 数据库系统概念
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52888
 
22 次点击  
分享到微博