mysql-介绍、MySQL部署、数据类型、存储引擎

数据库介绍  

什么是数据?

  数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵。数据本身没有意义,数据只有对实体行为产生影响才成为信息。数据可以是连续的值,比如声音,图像成为模拟数据。也可以是离散的,如符号、文字、称为数字数据。在计算机系统中,数据以二进制信息单元0,1的形式表示。

什么是数据库?

  数据库(database):是按照数据结构来组织、存储和管理数据的仓库

什么是数据库管理系统(DBMS)?

数据库管理系统:是由数据库及其管理软件组成的系统

  1.提供数据持久性的存储,备份,恢复

  2.支持事务管理

  3.数据操作的并发

  4.支持独立的管理语言(SQL语句)

扫描二维码关注公众号,回复: 3547155 查看本文章

使用数据库的优势:

1.数据的独立性:

  元数据的存储,应用程序程序不需数据格式问题

2.数据的冗余:

  最小化数据冗余,保障数据的统一性和一致性

3.数据的安全:

  不同的用户可以看到独立的数据

4.数据的利用率:

  使用结构化的数据管理语言(SQL语句)

5.简单的数据备份和恢复:

  提供多种数据备份恢复方式,使数据的安全性更高

数据库的分类:

  1.关系型数据库(MySQL,Oracle,db2,sqlserver)

  2.非关系型数据库(MongoDB,HBASE,Cassandra)

什么是关系型数据库

  关系数据库,是简历在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。显示世界中的各种实体以及实体之间的各种联系均用关系模型来标识。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。先如今虽然对此模型有一些批评意见,但它还是数据库存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

  mariadb数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用gpl授权许可。开发这个分支的原因之一是:甲骨文公司受够了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

  MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面。10.0.9版起使用XtraDB(名称代号为:Aria)来代替MySQL的innodb。

  mariadb直到5.5版本,均依照MySQL的版本,因此,使用mariadb5.5的人会从MySQL5.5中了解到mariadb的所有功能。

  从2012年11月12日起发布的10.0.0版开始,不再依照MySQL的版号。10.0.x版以5.5版为基础,加上移植自MySQL5.6版的功能和自行开发的新功能。

  MariaDb的api和协议兼容MySQL,另外又添加了一些功能,以支持本地的费阻塞操作和进度报告。这意味着,所有使用MySQL的连接器,程序库和应用程序也将可以在mariadb下工作。

MySQL数据库介绍

安装方式很多,源码安装,yum包安装,自行百度。

[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2018-09-25 12:08:45 CST; 2 weeks 3 days ago
 Main PID: 4630 (mysqld_safe)
    Tasks: 23
   CGroup: /system.slice/mysqld.service
           ├─4630 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─4757 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mys...

9月 25 12:08:23 localhost.localdomain systemd[1]: Starting MySQL Community Server...
9月 25 12:08:42 localhost.localdomain mysqld_safe[4630]: 180925 12:08:42 mysqld_safe Logging to '/v...'.
9月 25 12:08:42 localhost.localdomain mysqld_safe[4630]: 180925 12:08:42 mysqld_safe Starting mysql...ql
9月 25 12:08:45 localhost.localdomain systemd[1]: Started MySQL Community Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# 

修改/etc/my.cnf,在[mysqld]小节下添加一行:skip-grant-tables=1,重启MySQL服务;

MySQL监听端口为:3306,MongoDB默认端口为27017

简单操作参考我的另一篇博客:点击进入

 体系结构介绍

 MySQL的架构

  所谓MySQL的架构指的是MySQL的逻辑架构,了解MySQL的逻辑架构可以帮助我们更好的理解MySQL是如何工作的,以及在MySQL工作过程当中我们需要注意的一些地方,并且理解一些有关于数据库的基本概念和知识。

首先正如上图,MySQL的逻辑架构主要分为三层,分别为服务层,核心层和存储引擎层,首先在这张图的最上边,可以看到有很多的客户端连接着链接线程处理。链接线程处理这一层就称之为服务层,它主要的目的是为客户端请求做链接处理、授权认证、还有安全等等。那么当我们客户端的链接请求被服务层处理之后,并且允许链接,就进入到执行工作的这一环节,那么这些工作由核心层来进行完成。比方说下达一个查询指令,查询数据库当中的记录,那么首先会进入到核心层的查询缓存,先看看缓存当中有没有对这条查询语句的缓存信息,如果有,直接从缓存当中得到答案,这速度的最快的,如果没有,接下来可以去查找分析器。

  分析器用来分析SQL语句,了解我们到底要查找什么,并且还会到优化器中优化我们的SQL语句,最终再重新执行查询。所以说核心层它的主要工作是查询解析、分析我们的SQL语句、优化SQL语句、缓存查询的结果,以及所有的内建函数的存储过程、触发器还有视图等等,都是在核心层来完成的。最后是存储引擎层。当我们要查什么东西这件事情被数据库理解之后,那么查这些数据呢就会涉及到数据库的操作。存储引擎这一层就是来完成这项工作的,它完成存储和提取数据以及事务处理。

  接下来看一些具体的组成部分,首先来说客户端,客户端对于MySQL来讲,它并不是具体指某一个客户端软件。有些人可能就会认为MySQL这个命令他就是MySQL的客户端,其实这个并不是精确的说法,实际上MySQL客户端它是一种非常复合的一种概念,包含不同程序语言编写的前端应用程序和所调用的api接口。或者可以通俗的来讲,只要能够连接数据库并且可以对MySQL进行操作的软件,都可以称之为MySQL的客户端。形象来讲,比方说假设一个网站使用lnmp的环境,其中中间件使用的是PHP,而PHP通过调用PDO这个组件,可以连接MySQL的数据库。这个时候就可以说PHP这个中间件它就是一种MySQL客户端。

  客户端:

  1.MySQL客户端并不具体指某个客户端软件、

  2.实际上MySQL客户端是一种符合的概念。包含

    (1.不同程序语言编写的前端应用程序;2.所调用的api接口)

  服务层在这里主要完成线程的管理,是服务是为链接线程进行处理,为客户端请求做链接处理、授权认证等等。这一系列都在操作系统这个层面上由线程来进行完成。MySQL是一种单进程,多线程的软件。在这里假如说有一个链接,链接过来之后,正如这个图所看到的,进程中可以创建出新的线程,或者说派生出一个新的线程,为这个连接来提供服务。但是并不是所有的链接都可以得到新创建出的线程,因为创建线程和消除线程本身也是一种消耗系统资源的行为,所以MySQL会非常聪明的创建出一种叫做线程缓冲池的东西,把已经被使用过的线程,现在不用了,先缓存在缓冲池里面,接下来有新的链接过来,那么MySQL会有限的使用线程缓冲池中的线程为用户提供服务,这样就大大节省了相应的系统资源,让MySQL能够承受更大并发量的访问,这也是MySQL非常优秀的一点。

 

  在上图当中,对MySQL下达一个查询之后,具体的执行过程会是什么?一个查询过来往往对应的就是在SQL语句当中的一句select语句,那么MySQL会严格匹配这条select语句,如果在缓存当中发现了有一模一样select语句的结果缓存的话,那么就可以通过缓存的方式直接返回给用户结果,这是查询最快的一种方式,如果没有缓存的话,那么它就会走左边的这个分支,首先它要解析查询,理解下达的这个select语句是什么意思,要查什么表,查什么字段,或者说要做多表查询的话,是那些表联合成什么样子?是否需要做排序?是否需要做分组?或者是其它的,接下来它会优化你的select语句,就是根据自己数据库当中的数据结构和存储来优化select语句执行的方式,让它以最好的效率来执行,优化好相应的语句之后,再去执行查询,并且把查询的结果返回给用户。同样查询结构也可以被缓存到缓存当中。以方便下次如果来了同样的查询,可以快速的得到结果。就不需要再走左边分支这么多的步骤了。

 

  存储引擎层比较值得我们关注的是这个可插式存储引擎,这个是MySQL非常好的一个特点,因为不同的存储引擎它的特性、功能、和使用范围是不一样的。MySQL可以根据相应不同数据的特性来选择合适的存储引擎,使用者也可以非常方便的去挑选不同存储引擎来完成自己的工作,存储引擎就是查询管理操作数据的东西,数据都要存储在当前的存储设备当中,在存储设备当中具体体现为一个个的文件,那么这些数据相应的包含了MySQL数据库的数据文件,还包含了很多相应的日志,这些都是由MySQL所产生的,因此可插式存储引擎可以支持多种的文件系统,包含在Linux中常用的ext系列文件系统,NTFS等等,这些都是可以通过存储引擎来进行使用,另外存储引擎还可以处理文件和日志,比如说索引文件、二进制文件、慢查询日志等等,这些都是由存储引擎最终写入到存储当中的。

整个MySQL逻辑架构的总图

  我们可以把它们集合在一起再来看一下,首先最上面这个叫做支持接口,支持的接口包含标准C的API,JDBC,ODBC等等应用程序的API接口,这些接口会被相应的客户端应用程序所调用,用来连接到MySQL数据库。那么MySQL server当中第一个处理这些链接的就是连接池,刚才提到过了,连接池用来缓存相应的线程,每一个连接都提供线程为其进行服务,那么在这个服务过程当中完成了验证授权、链接限制、内存缓存管理等等一系列的功能,再接下来右边有一个竖列表示企业管理服务和工具,比如说备份恢复、安全、复制、集群、分区管理、事例管理等等,这些都是相应MySQL内检的功能或者工具,甚至有一些是单独的命令,它们参与了这方面的管理,再往下可以看到四个重要的组成部分,分别是SQL接口、解析器、优化、缓存和缓冲池,首先来着看这个SQL接口,这个是数据管理语言和数据定义语言、存储过程、视图、触发器等等,这些SQL接口支付了相应SQL语句的实现,也就是下达的SQL语句指令,就是由这里来进行功能上的支持,在功能支持的基础之上要用到第二个组成部分,就是这个解析器,解析器对查询以及相应带的事务对象进行优先级的划分,并且SQL语句进行优化,解释理解这些SQL语句,最终放到优化的这个组成部分当中,解释清楚了之后才能进行优化,所以说这个优化就是对访问路径、统计等等进行优化操作。然后在旁边可以看到缓存和缓冲池,它用来缓存对MySQL进行操作的结果,包括查询缓冲以及其他各种类型的缓冲,用来加快数据执行的效率。

  再往下面就是MySQL的特点,很好地一个特性就是可插式存储引擎,在这里它可以支持多种不同的存储引擎,可以把它形象的理解成为:当要操作某一个数据的时候,上面这一层就会调用其中一个存储引擎,好想一个插销一样,查到下面存储这一层上来了,而存储这一层就是相应的文件系统、文件日志等等这些系统层面的东西。那么这一层就是把MySQL与当前系统当中的文件这一层连接在一起的这么一个环节,它也是非常重要的。以上就是MySQL相应的逻辑架构,链接这个逻辑架构之后。通过这个逻辑架构可以更好的去理解MySQL对一些行为的处理方式,比如说事务处理。

 结构化查询语言SQL

   结构化查询语言(缩写SQL),是一种特殊母的之编程语言,用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中国, 1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言,1987年得到国际标准组织的支持下成为国际标准。不过各种同行的数据库系统在其实践过程中都对SQL规范作了某些改编和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

  SQL是高级的非过程化编程语言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。它以记录项目【records】的合集(set)项集【record set】作为操纵对象,所有SQL语句接受项集作为输入,回提交的项集作为输出,这种项集特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它拥有极大的灵活性和强大的功能。在多数情况下,在其他编程语言中需要用一大段程序才可实践的UI个单独实践,而其在SQL上只需要一个语句就可以被表达出来。这也意味着用SQL可以写出非常复杂的语句。

 SQL分类 

  • 数据查询语言(DQL)
  • 数据定义语言(DDL)
  • 数据操纵语言(DML)
  • 数据控制语言(DCL)

数据库基本操作

后续持续更新中。。。

猜你喜欢

转载自www.cnblogs.com/52-qq/p/9778107.html