目录
1.连接mysql
2.mysql,mysqladmin,mysqld
3.什么是数据库?优点?
4.见一见MySQL数据库的使用
5.数据库分类
5.1 关系型数据库
5.2 非关系型数据库
6.主流数据库对比
7.为什么MySQL数据库这么受欢迎
8.服务器,数据库,表之间的关系
9.MySQL架构
9.1.MySQL逻辑模块组成
10.SQL语句分类
11.存储引擎
事实上,MySQL是一种网络服务!
1.连接mysql
连接mysql 的完整命令如下
mysql -h 主机IP -P 端口号 -u 用户身份 -p
我们看看一个例子
好的我们登录上来了 。
事实上,
- 不使用-h选项时,默认连接的是本地的MYSQL
- 不使用-P选项时,默认使用的是3306端口号
2.mysql,mysqladmin,mysqld
大家在使用mysql的过程中难免会遇到下面这个3样东西,那它们到底是什么呢?
- mysql
mysql是MySQL的客户端,用于连接MySQL服务器。在命令行中输入mysql后,会弹出MySQL客户端的界面,用户可以在其中输入SQL命令或者执行MySQL的内置命令,以操作MySQL数据库。比如我们可以输入以下命令连接mysql并创建一个名为test的数据库:
mysql -u username -p create database test;
mysql(客户端程序):
- 作用:mysql 是一个命令行工具,用于连接到 MySQL 服务器并执行 SQL 命令。它是用户与 MySQL 数据库进行交互的主要界面。
- 功能:用户可以通过 mysql 客户端输入 SQL 语句来查询、更新、删除和插入数据,以及管理数据库结构(如创建和删除表、索引等)。
- 使用方式:在命令行或终端中输入 mysql -u 用户名 -p 来连接到 MySQL 服务器,之后输入用户密码即可进入 MySQL 命令行环境。
- mysqladmin
mysqladmin是MySQL的管理员工具,提供对MySQL的服务器进行配置和管理的功能。在命令行中输入mysqladmin后,可以使用各种命令来进行MySQL服务的管理,例如创建和删除数据库、查看数据库状态等等。比如我们可以输入以下命令创建名为test的数据库:
mysqladmin -u username -p create test
mysqladmin(管理员工具):
- 作用:mysqladmin 是一个用于管理和维护 MySQL 服务器的命令行工具。它提供了一系列命令来执行服务器级别的管理任务。
- 功能:例如,可以使用 mysqladmin 来检查服务器的状态、创建和删除数据库、刷新权限、重载配置、关闭和重启服务器等。
- 使用方式:在命令行或终端中输入 mysqladmin -u 用户名 -p 命令 来执行特定的管理任务。例如,检查服务器状态可以使用 mysqladmin -u 用户名 -p status。
- mysqld
mysqld则是MySQL的服务器端程序,也就是MySQL服务本身。它在后台运行,并等待用户发出连接请求。在启动MySQL服务时,使用mysqld命令来启动MySQL。
在Linux系统中,可以使用以下命令启动MySQL服务:
sudo systemctl start mysql
mysqld(服务器端程序):
- 作用:mysqld 是 MySQL 数据库的核心组件,它负责监听客户端的连接请求、执行 SQL 语句、管理数据以及维护数据库系统。
- 功能:mysqld 是 MySQL 服务的主体,它负责数据的存储、检索和管理。它监听一个或多个端口(默认是 3306),等待客户端的连接请求,并处理这些请求。
- 运行方式:mysqld 通常作为系统服务或守护进程运行,在系统启动时自动启动。用户可以通过配置文件(如 my.cnf 或 my.ini)来定制 MySQL 服务器的行为。
- 总结
- mysql是MySQL的客户端程序,用于连接MySQL服务器和执行SQL命令;
- mysqladmin是MySQL的管理员工具,提供对MySQL的服务器进行配置和管理的功能;
- mysqld是MySQL的服务器端程序,也就是MySQL服务本身。
三者在MySQL的使用过程中各自扮演不同的角色,互相配合,以保证MySQL服务的正常运行。
- 用户通过 mysql 客户端连接到 mysqld 服务器,并输入 SQL 语句来管理数据。
- 管理员使用 mysqladmin 工具来管理和维护 MySQL 服务器,如检查服务器状态、修改配置等。
- mysqld 服务器则负责处理客户端的请求,管理数据,并与其他系统组件(如存储引擎)协作以提供高效的数据库服务。
这三者互相配合,共同构成了 MySQL 数据库系统的核心组件,使得用户和管理员能够高效地管理和使用数据库。
从这里我们就得知,MySQL是基于client-server模式下的一种网络服务
我们口语上的一些词语的定义也就明显了
- 数据库---在磁盘或者内存中存储的特定结构组织的数据,即在磁盘上存储的一套数据库方案。
- 数据库服务-----mysqld
- 数据库客户端-----mysql
3.什么是数据库?优点?
数据库有以下定义
- 数据库:在磁盘或者内存中存储的特定结构组织的数据,即在磁盘上存储的一套数据库方案。
- 数据库(database)是用来组织、存储和管理数据的仓库。
我们看一个例子
小红是一个家政阿姨,她每天的工作是给雇主收拾屋子的卫生,并且将雇主女主人的用品收纳到合适的位置。这一天,小红遇上了一个重大难题:女主人的衣服不好收纳。机智的小红经过一些观察,总结出了这个女主人的衣服有以下特点:
- 特别多。小红曾经问过女主人是否统计过家中衣服数量,女主人笑而不语。加之之前误判了衣服的数量,衣柜尺寸过小,该雇主已经买了很多衣柜用于存放大量衣服。这种非集中式的衣柜收纳也使得找到想穿的衣服更加困难。
- 特别乱。女主人是一个爱美的女子,家中的衣服多为设计款,并不像寻常人家的衣服那样有标准形状。这种情况也进一步提高了收纳衣服的难度。
- 衣服和衣服之间有一些某种神奇的模式(女生也许会更加清楚,这个模式叫做穿搭风格)。小红发现女主人很喜欢的一条红色裤子,经常与一件绿色上衣穿在一起。但是有时候女主人会经常在找到了红色裤子的时候,需要再花上10分钟才能找到那件与之搭在一起的绿色上衣。女主人很苦恼这件事情。
后来小红学习了一些计算机知识,理解了一些计算机思想,她最终解决了这个困扰女主人的收纳难题。她的具体做法如下:
- 她将一众衣服分成了几类,分别是上衣,裤子,裙子,配饰(帽子,围巾,手套),内衣,内裤,袜子,外套等。
- 家中一共有3个大衣柜,她将衣柜中的衣服全部清出,按照1的分类,分成了数堆。
- 根据衣柜的容量,将最多的上衣放置在家中最大的A衣柜,将次之多裤子和裙子放在家中第二大衣柜B衣柜,配饰单独放在一个衣柜中。
- 每个衣柜中的衣服,按照颜色排布,解决了找不到绿色上衣的难题。
至此,小红解决了女主人的衣服收纳难题。
在上述例子中,数据库就相当于小红为女主人设计的衣服收纳系统。具体来说,可以将这个类比进一步细化如下:
-
数据(衣服):女主人的大量衣服,包括上衣、裤子、裙子、配饰等,这些相当于数据库中的“数据”。
-
数据结构(分类):小红将衣服分成了几类,如上衣、裤子、裙子等,这相当于在数据库中设计表结构或数据模型,以便更有效地组织和存储数据。
-
存储介质(衣柜):家中的3个大衣柜相当于数据库的存储介质,用于存放数据(衣服)。
-
数据分布(衣柜分配):小红根据衣柜的容量和衣服的数量,将不同类型的衣服分配到不同的衣柜中,这类似于在数据库中设计数据的分布策略,以提高数据访问的效率。
-
数据索引(颜色排布):小红在每个衣柜中按照颜色排布衣服,这相当于在数据库中创建索引,以便快速定位和检索数据。在这个例子中,颜色排布解决了女主人找不到搭配衣服的问题,而数据库中的索引则解决了快速查询数据的问题。
因此,小红利用分类、分配和索引等思想,为女主人设计了一个高效的衣服收纳系统,这个系统的工作原理与数据库的工作原理非常相似。
你可能产生疑问,既然数据库和excel的功能如此相近,为何不直接使用excel进行数据存储呢?数据库和excel相比有许多优势,列举如下:
- excel存储数据有规模限制:excel表格最多存储1048576行16384列数据,这对于大数据时代显然是不够的。数据库面对的数据规模更为庞大,而当数据规模超过单一数据库的限制时,即可以通过将单一数据库扩展到分布式数据库的形式扩大存储规模。
- excel的功能比数据库少:excel可以用于制作各种复杂的表格文档,进行繁琐的数据计算,并能对输入的数据进行各种复杂统计运算,也可以制作彩色丰富的商业图表。数据库功能则更强大,除了可以实现excel的基本功能,还可以通过设计和使用各种窗体,进行数据查询并生成相应报表。
- excel的数据结构比数据库简单:excel中的表格的数据按照表格存储,没有数据库中的模式的概念,因而很难在excel中进行连接两个表格的操作。
事实上,使用数据库相比于使用文件或Excel存储数据有以下优势:
- 1. 数据库具有更好的数据结构和数据管理能力,可以更方便地进行数据的增删改查操作,支持事务处理和数据的完整性约束。
- 2. 数据库可以支持多用户同时访问和操作同一数据,而文件或Excel则需要通过文件锁等机制来实现。
- 3. 数据库可以支持更高级别的数据查询和分析,如聚合查询、复杂筛选、多表联合查询等,而文件或Excel则需要编写复杂的程序来实现。
- 4. 数据库可以支持数据的备份和恢复,以及数据的迁移和同步,而文件或Excel则需要手动进行备份和复制。
- 5. 数据库可以更好地保护数据的安全性和隐私性,支持用户和角色管理、权限控制等机制,而文件或Excel则需要通过加密和访问控制等手段来实现。
4.见一见MySQL数据库的使用
我们见一下在Linux环境下的数据库,我们现在直接使用mysql来建立一个数据库,然后建立一张表结构,然后插入一些数据,见一见mysql在Linux是如何表现的。
上面那个框框里面的就是数据库,那这些数据库到底在哪里呢?
我们打开配置文件 /etc/mysql/mysql.conf.d/mysql.conf
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
上面那个datadir就是数据库所在地,也就是/var/lib/mysql
sudo ls /var/lib/mysql
大家看到了吧,这里就是数据库所在地方
接下来我们创建数据库
- 创建数据库
create database helloworld;
我们去/var/lib/mysql里面看看有没有这个数据库
有吧!!说明我们创建成功了
所谓的建立数据库,就是建立Linux下的一个目录
- 使用数据库
use helloworld;
我们使用helloworld数据库之前必须先输入上面这个语句,才能使用
- 创建数据库表
create table student(
id int,
name varchar(32),
gender varchar(2)
);
这段代码是用于在数据库中创建一个名为 student 的表的SQL(Structured Query Language)语句。SQL是用于访问和操作数据库系统的标准编程语言。
下面是这条语句各部分的解释:
- create table student:这是SQL中用来创建新表的命令。student 是新表的名称。
- id int:这定义了表中的一个列(字段)名为 id,数据类型为 int(整数)。这通常用于存储学生的唯一标识符,如学号。
- name varchar(32):这定义了另一个列名为 name,数据类型为 varchar(32)。varchar 是一种可变长度的字符串数据类型,括号内的数字(在这个例子中是32)指定了字符串的最大长度。这意味着 name 列可以存储最多32个字符的文本,通常用于存储学生的姓名。
- gender varchar(2):这定义了第三个列名为 gender,数据类型为 varchar(2)。考虑到性别通常表示为单个字符(如 'M' 表示男性,'F' 表示女性),这里指定长度为2可能是为了包含可能的附加字符(如一个空格或一个表示未知性别的字符),或者仅仅是出于对未来扩展的考虑。
整体而言,这条SQL语句创建了一个包含三个字段的 student 表:id(整数类型,用于存储唯一标识符),name(可变长度的字符串类型,用于存储姓名,最大长度为32个字符),和 gender(可变长度的字符串类型,用于存储性别,最大长度为2个字符)。
- 在数据库里建立表,本质就是在创建一个文件
- 表中插入数据
我们上面创建的是一个空表,现在需要往表里加数据
insert into student (id, name, gender) values (1,'张三','男');
insert into student (id, name, gender) values (2,'李四','女');
insert into student (id, name, gender) values (3,'王五','男');
- 查询表中的数据
select * from student;
上面就是数据库的基本操作.
上面自动创建的文件的那些工作,都是mysqld在做的!
5.数据库分类
数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值(Key-Value)数据库、列存储数据库、面向文档数据库、搜索引擎数据库等。
5.1 关系型数据库
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式), 如下图是一个二维表的实例。
通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
典型产品:MySQL、SqlServer、Oracle、PostgreSQL、SQLite等。
5.2 非关系型数据库
键值存储数据库
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
如图是某公有云的键值存储示意图,其中键包含分区键和排序键,而值包含更多的实际信息。比如实际使用是可以以学号为键,姓名、性别、年龄和班级等信息为值进行存储。实际存储形式很灵活,是业务需求自行定义即可。
典型产品:Redis、Memcached等。
列存储数据库
列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是对表中数据的存储形式的差异。
如图是传统行数据库和列数据库表中数据在磁盘上的存储形式的差异对比。对于行存储数据库,表中的数据是以行为单位逐行存储在磁盘上的;而对于列存储数据库,表中的数据则是以列为单位逐列存储在磁盘中。
列存储解决的主要问题是数据查询问题。我们知道,平时的查询大部分都是条件查询,通常是返回某些字段(列)的数据。对于行存储数据,数据读取时通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。而列存储,每次读取的数据是集合的一段或者全部,不存在冗余性问题。这样,通过这种存储方式的调整,使得查询性能得到极大的提升。
典型产品:HBase等。
面向文档数据库
此类数据库可存放并获取文档,可以是XML、JSON、BSON等格式,这些文档具备可述性(self-describing),呈现分层的树状结构(hierarchical tree data structure),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。
典型产品:MongDB、CouchDB等。
图形数据库
图形数据库顾名思义,就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如图4这种人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。
典型产品:Neo4J、InfoGr id等。
搜索引擎存储
搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。
典型产品:Solr、Elasticsearch等。
6.主流数据库对比
我们看看目前主流的数据库
数据库 | 优势 | 缺点 |
MySQL | 1)MySQL性能卓越,服务稳定,很少出现异常宕机。 2)MySQL开放源代码且无版权制约,自主性及使用成本低,版本更新较快。 3)MySQL软件体积小,安装使用简单,并且易于维护,安装及维护成本低。 4)MySQL支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的支持。 | 数据量大时处理性能不及Oracle(但是不代表MySQL性能差) |
Sql Server | 1)真正的客户机/服务器体系结构 2)图形化的用户界面,使系统管理和数据库管理更加直观、简单 3)丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地 4)与WinNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等,SQL Server也可以很好地与Microsoft BackOffice产品集成。 5)提供数据仓库功能,这个功能只在Oracle和其他昂贵的DBMS中才有。 | 只能在Windows系统下运行 |
Oracle | 1)Oracle 能在所有主流平台上运行 2)Oracle 性能高,保持开放平台下TPC-D和TPC-C世界记录 3)获得最高认证级别的ISO标准认证 | 价格昂贵 |
PostgreSQL | 1)PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步。 2)PG 性能高速度快。任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降。 3)PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型。 4)PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统 5)PG对数据量大的文本以及SQL处理较快 | |
SQLite | 1)零配置,SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复 2)SQLite是被设计成轻量级,自包含的,不依赖服务进程 3)采用无数据类型,所以可以保存任何类型的数据,SQLite采用的是动态数据类型,会根据存入值自动判断 4)可移植,可运行在不同操作系统上 | 数据量不宜过大,sql语句执行相比其他数据库效率较低 |
数据库 | 优势 | 缺点 |
Redis | 1)支持内存缓存,这个功能相当于Memcached 2)支持持久化存储,这个功能相当于MemcacheDb,ttserver 3)数据类型更丰富。比其他key-value库功能更强 4)支持主从集群,分布式 5)支持队列等特殊功能 | |
Memcached | 开源的、高性能的、具有分布式内存对象的纯缓存系统 | 不支持持久化 |
HBase | 1)适合存储半结构化或非结构化数据 2)高可用和海量数据以及很大的瞬间写入量 3)记录很稀疏,RDBMS的行有多少列是固定的,为null的列浪费了存储空间。HBase为null的Column不会被存储,这样既节省了空间又提高了读性能。 | 1)不适合于大范围扫描查询 2)不直接支持 SQL 的语句查询 |
MongoDB | 1)弱一致性(最终一致),更能保证用户的访问速度 2)查询与索引方式灵活,是最像SQL的Nosql 3)内置GridFS,支持大容量的存储 4)内置Sharding,支持复制集、主备、互为主备、自动分片等特性 5)第三方支持丰富 6)性能优越 | 1)单机可靠性比较差 2)磁盘空间占用比较大 3)大数据量持续插入,写入性能有较大波动 |
7.为什么MySQL数据库这么受欢迎
MySQL之所以如此受欢迎,主要归因于以下几个关键因素:
- 一、开源免费
MySQL是一个完全开源的数据库系统,用户可以免费使用,并且其源代码对所有人开放。这一点对于许多小型企业和个人开发者来说非常重要,因为它们可能没有足够的预算去购买昂贵的商业数据库系统。开源也意味着MySQL有一个庞大的用户和开发者社区,用户在遇到问题时可以很容易地找到帮助和解决方案。
- 二、高性能
MySQL使用了多种机制进行优化,包括索引、缓存等,使得其查询速度非常快。MySQL采用了B-Tree索引来加快数据的查找速度,同时也使用了缓存机制,将常用的数据存储在内存中,避免了频繁的磁盘I/O操作,从而提高了查询速度。这使得MySQL非常适合处理大量的数据和高并发的查询。
- 三、易于使用
MySQL的安装和配置都非常简单,用户可以很快地将它部署在自己的系统上。MySQL的使用也非常方便,它有一个非常友好的用户界面,用户可以通过这个界面进行各种数据库操作。此外,MySQL还有大量的教程和文档,以及丰富的社区支持,这些资源可以帮助用户更快地学习和掌握MySQL的使用。
-
四、稳定性好
MySQL的稳定性经过了大量的实践检验,它可以在各种环境下稳定运行。无论是在大型的服务器上,还是在小型的个人电脑上,MySQL都可以稳定运行,不会出现严重的错误和故障。这使得用户可以信任MySQL,将其用于重要的业务系统。
-
五、支持多种操作系统
MySQL可以在Windows、Linux、Mac等多种操作系统上运行,兼容性非常好。这使得MySQL可以适应各种不同的环境和需求,无论用户使用什么样的操作系统,都可以使用MySQL。
-
六、丰富的功能集
MySQL具有丰富的功能集,包括事务支持、存储过程、触发器和视图等,可以满足各种应用程序的需求。同时,MySQL还支持多种存储引擎,如InnoDB、MyISAM等,用户可以根据不同的应用场景选择合适的存储引擎。
-
七、安全性高
MySQL提供了多层次的安全措施,包括密码保护、基于角色的访问控制、SSL连接加密等,以保护数据免受未授权访问和安全威胁。这些安全措施使得MySQL成为一个安全可靠的数据库系统。
- 八、广泛的应用程序和平台支持
无论是在Web开发、企业应用程序还是云计算领域,MySQL都有广泛的应用。因此,开发人员和管理员可以轻松地找到相关的文档、教程和支持。这使得MySQL成为一个非常流行的数据库系统。
综上所述,MySQL之所以如此受欢迎,是因为它具有开源免费、高性能、易于使用、稳定性好、支持多种操作系统、丰富的功能集、安全性高以及广泛的应用程序和平台支持等多个优点。这些优点使得MySQL成为许多企业和个人开发者的首选数据库系统。
所以我们要好好学习MySQL!!
8.服务器,数据库,表之间的关系
数据库服务器,其实就是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。而为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
因此,数据库服务器、数据库和表的关系如图所示:
9.MySQL架构
我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture)
第一层:连接层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。
第二层:核心服务层 。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。
第三层:存储引擎层。通常叫做StorEngine Layer ,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物,或者取出有特定主键的行。存储引擎不能解析SQL,互相之间也不能通信。仅仅是简单的响应服务器 的请求。
第四层:数据存储层。主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
9.1.MySQL逻辑模块组成
虽然从上图看起来 MySQL 架构非常的简单,就是简单的两部分而已,但实际上每一层 中都含有各自的很多小模块,尤其是第二层 SQL Layer ,结构相当复杂的。下面我们就分别 针对 SQL Layer 和 Storage Engine Layer 做一个简单的分析。我们看下图体系结构
1.Connectors
指的是不同语言中与SQL的交互,如php、java等。
2 Management Serveices & Utilities:
系统管理和控制工具
3 Connection Pool: 连接池
管理缓冲用户连接,线程处理等需要缓存的需求。
负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信, 接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。
4 SQL Interface: SQL接口。
接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
5 Parser: 解析器。
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
主要功能:
- a . 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
- b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
6 Optimizer: 查询优化器。
SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果
他使用的是“选取-投影-联接”策略进行查询。 用一个例子就可以理解: select uid,name from user where gender = 1; 这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤 这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤 将这两个查询条件联接起来生成最终查询结果
7 Cache和Buffer: 查询缓存。
Cache:主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
buffer与cache的区别? 缓存那里实际上有buffer和cache两个,那它们之间是否有什么不同呢?简单的说就是,buffer是写缓存,cache是读缓存。
8 、存储引擎接口
存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。 从图还可以看出,MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。 注意:存储引擎是基于表的,而不是数据库。
10.SQL语句分类
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
- DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
11.存储引擎
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
show engines;
事实上,使用次数最多的是InnoDB和MyISAM
这就是我们配置文件里面配置的东西,我们把默认的存储引擎改成了innodb