新手入门Mysql--概念


Posted in MySQL onJune 18, 2021

1. 是什么?

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

1.1 RDBMS

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

1.数据以表格的形式出现

2.每行为各种记录名称

3.每列为记录名称所对应的数据域

4.许多的行和列组成一张表单

5.若干的表单组成database

1.2 MySQL数据库

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、 Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

2. 工作机制

2.1 整体架构图(C/S架构)

新手入门Mysql--概念

  • Client :

提供连接MySQL服务器功能的常用工具集

  • Server :

MySQL实例,真正提供数据存储和数据处理功能的MySQL服务器进程

  • mysqld:

MySQL服务器守护程序,在后台运行。它管理着客户端请求。mysqld是一个多线程的进程,允许多个会话连接,端口监听连接,管理MySQL实例

  • MySQL memory allocation:

MySQL的要求的内存空间是动态的,比如 innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每个会话都有独一无二的执行计划,我们只能共享同一会话域内的数据集。

  • SESSION

为每个客户端连接分配一个会话,动态分配和回收。用于查询处理,每个会话同时具备一个缓冲区。每个会话是作为一个线程执行的

  • Parser

检测SQL语句语法,为每条SQL语句生成SQL_ID,用户认证也发生在这个阶段

  • Optimizer

创造一个有效率的执行计划(根据具体的存储引擎)。它将会重写查询语句。比如:InnoDB有共享缓冲区,所以,优化器会首先从预先缓存的数据中提取。使用 table statistics optimizer将会为SQL查询生成一个执行计划。用户权限检查也发生在这个阶段。

  • Metadata cache

缓存对象元信息和统计信息

  • Query cache

共享在内存中的完全一样的查询语句。如果完全相同的查询在缓存命中,MySQL服务器会直接从缓存中去检索结果。缓存是会话间共享的,所以为一个客户生成的结果集也能为另一个客户所用。查询缓存基于SQL_ID。将SELECT语句写入视图就是查询缓存最好的例子。

  • key cache

缓存表索引。MySQL keys是索引。如果索引数据量小,它将缓存索引结构和叶子节点(存储索引数据)。如果索引很大,它只会缓存索引结构,通常供MyISAM存储引擎使用

2.2 网络协议

2.2.1 通信协议

到MySQL5.7为止,总共有五种,分别是TCP/IP,TLS/SSL,Unix Sockets,Shared Memory,Named pipes,下面我们就来看看这五种的区别:

方式 默认开启 支持系统 只支持本机 如何开启 参数配置
TCP/IP 所有系统 ?skip-networking=yes/no ?port?bind-address
TLS/SSL 所有系统(基于TCP/IP)之上 ?ssl=yes/no ?ssl-* options
Unix Sockets 类Unix系统 ?socket= 来关闭 ?socket=socket path
Shared Memory Windows系统 ?shared-memory=on/off. ?shared-memory-base-name=
Named pipes Windows系统 ?enable-named-pipe=on/off ?socket=

2.2.2 报文格式

协议头:

每个协议头共4个字节

- 包数据长度:

前三个字节表示数据部分的长度(不包括协议头),三字节能表示的最大长度是16M-1(2^24 - 1),如果要发送的数据部分大于这个长度,要进行拆包,每16M-1个长度为一包。接收端在接受数据的时候,如果检测到包的长度是16M-1,说明后续还有数据部分,直到接收到<16M-1长度的数据包结束。这意味着最后一包的数据长度可能为0.

序号:

1个字节,从0开始递增。当发送一个新的sql、数据库重连,该值清0(函数sql/Net_serv.cc : net_clear).

数据类型:

除了固定长度的整型或者字符串之外,还有其他几种类型的数据。(固定长度字段数据的存取:include/Mybyte_order.h : 存值 intstore 取值:intkorr 多字节的处理按照小端优先的方式)

1. 可变长度的整数   
        对该类数据的存取在函数:sql-common/Pack.c: 存整数: net_store_length     读整数:net_field_length
        如果数值<251,直接用一个字节存储这个值。
       如果251<=数值<2^16, 采用3个字节存储,第一个字节是252, 另外2个字节存储整数内容
       如果2^16<=数值<2^24,采用4字节存储,第一个字节是252,另外3个字节存储整数内容
       如果2^24<=数值<2^64,采用9字节存储,第一个字节255,另外8字节存储整数内容
       如果第一个字节为251,表示该整数字段为null
       如果第一个字节为255,表示该字节是ERR包的第一个字节
   2. 可编码长度的字符串
           字符串的长度采用可变长度的整数进行编码。

2.3 SQL语法

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据UPDATE - 更新数据库表中的数据DELETE - 从数据库表中删除数据INSERT INTO - 向数据库表中插入数据SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改数据库CREATE TABLE - 创建新表ALTER TABLE - 变更(改变)数据库表DROP TABLE - 删除表CREATE INDEX - 创建索引(搜索键)DROP INDEX - 删除索引

3. 小结

这篇文章从宏观和使用角度去了解Mysql是什么,后续深入。也请大家多多关注三水点靠木的更多内容

MySQL 相关文章推荐
MySQL时间设置注意事项的深入总结
May 06 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
MySQL REVOKE实现删除用户权限
Jun 18 #MySQL
MySQL GRANT用户授权的实现
Jun 18 #MySQL
浅谈MySQL user权限表
Jun 18 #MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 #MySQL
MySQL 亿级数据导入导出及迁移笔记
如何使用分区处理MySQL的亿级数据优化
Jun 18 #MySQL
You might like
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
vue中activated的用法
2021/01/03 Vue.js
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
python正则表达式及使用正则表达式的例子
2018/01/22 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python制作抖音代码舞
2019/04/07 Python
python调试神器PySnooper的使用
2019/07/03 Python
python psutil模块使用方法解析
2019/08/01 Python
基于python实现把图片转换成素描
2019/11/13 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
实习生体会的自我评价范文
2013/11/28 职场文书
环境卫生标语
2014/06/09 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
群众路线学习笔记范文
2014/11/06 职场文书