新手入门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慢查询的坑
Apr 28 MySQL
MySql学习笔记之事务隔离级别详解
May 12 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php上传excel表格并获取数据
2017/04/27 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
js日期时间补零的小例子
2013/03/05 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
python操作xml文件详细介绍
2014/06/09 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python中引用与复制用法实例分析
2015/06/04 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
会计实习期自我鉴定
2013/10/06 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
观后感的写法
2015/06/19 职场文书
信用卡工作证明范本
2015/06/19 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js