当前位置: 首页 > article >正文

1.初识MySQL

初识 MySQL

  • 1.服务器处理客户端请求
  • 2.常用存储引擎
  • 3.关于存储引擎的一些操作
    • 3.1 查看当前服务器程序支持的存储引擎
    • 3.2 设置表的存储引擎
      • 3.2.1 创建表时指定存储引擎
      • 3.2.2 修改表的存储引擎
  • 4.总结

MySQL 默认采用 TCP/IP 的方式来处理客户端与服务器连接过程。

1.服务器处理客户端请求

在这里插入图片描述

  1. 连接管理:使用连接池的思想,客户端往服务器发送请求,服务器接收到的请求只是一个文本消息
  2. 解析优化
    • 查询缓存
    • 语法解析:从文本中解析出要查询的表、各种查询条件放到 MySQL 服务器内部使用的一些数据结构上
    • 查询优化:生成查询计划,可以通过EXPLAIN 语句可以查看某个语句的执行计划
  3. 存储引擎
    • MySQL 服务器把数据的存储和提取操作都封装到了一个名为存储引擎的模块中。
    • 表是由一行一行的记录组成的,但这只是一个逻辑上的概念。在物理上如何表示记录,怎么从表中读取数据,以及怎么把数据写入具体的物理存储器上,都是存储引擎负责的事情。
    • 为了实现不同的功能,MySQL提供了各式各样的存储引擎,不同存储引擎管理的表可能有不同的存储结构,采用的存取算法也可能不同。
    • 存储引擎的功能就是接收上层传下来的指令,然后对表中的数据进行读取或写入操作。

为了方便管理,人们把MySQL服务器处理请求的过程简单地划分为 server 层和存储引擎层。

  • 连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存取的功能划分为 server 层的功能。
  • 存取真实数据的功能划分为存储引擎层的功能。
  • 各种不同的存储引擎为server 层提供统一的调用接口,其中包含了几十个不同用途的底层函数,比如“读取索引第一条记录”,“读取索引下一条记录”,“插入记录”等。

所以在 server 层完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的接口获取到数据后返回给客户端就好了。

不过需要注意的一点是,server 层和存储引擎层交互时,一般是以记录为单位的

以SELECT 语句为例,server 层根据执行计划先向存储引擎层取一条记录,然后判断是否符合 WHERE 条件,如果符合,就发送给客户端,否则跳过该记录然后继续向存储引擎索要下一条记录;依此类推。

注:

server 层在判断某条记录符合要求之后,其实是先将其发送到一个缓冲区,待到该缓冲区满了,才向客户端发送真正的记录。该缓冲区大小由系统变量 net_buffer_length 控制。

2.常用存储引擎

MySQL 支持多种存储引擎。

在这里插入图片描述

我们最常用的就是 InnoDB 和 MyISAM,偶尔还会提一下 MEMORY。其中 InnoDB 是 MySQL 默认的存储引擎。

存储引擎对某些功能的支持情况如下:

在这里插入图片描述

InnoDB 从 MySQL 5.5.5 版本开始作为 MySQL 的默认存储引擎,之前版本的默认存储引擎是 MyISAM。

3.关于存储引擎的一些操作

3.1 查看当前服务器程序支持的存储引擎

SHOW ENGINES;

在这里插入图片描述

  • Support 列表示该存储引擎是否可用,DEFAULT 值代表当前服务器程序的默认存储引擎
  • Comment 列是对存储引擎的一个描述
  • Transactions 列代表该存储引擎是否支持事务处理
  • XA 列表示该存储引擎是否支持分布式事务
  • Savepoints 列代表该存储引擎是否支持事务的部分回滚

3.2 设置表的存储引擎

存储引擎是负责对表中数据进行读取和写入工作的,我们可以为不同的表设置不同的存储引擎。也就是说:不同的表可以有不同的物理存储结构、不同的读取和写入方式。

3.2.1 创建表时指定存储引擎

如果创建表时没有指定表的存储引擎,就会使用默认的 InnoDB。

显示地指定表的存储引擎:

CREATE TABLE 表名 (
	建表语句;
) ENGINE = 存储引擎名称;

eg:
mysql> CREATE TABLE engine_demo_table (
	-> 		i int
	-> ) ENGINE = MyISAM;
Query OK, 0 rows affected (0.02 sec)

3.2.2 修改表的存储引擎

ALTER TABLE 表名 ENGINE = 存储引擎名称;

eg:
mysql> ALTER TABLE engine_demo_table ENGINE = InnoDB;
mysql> SHOW CREATE TABLE engine_demo_table\G
************************* 1.row *************************
		Table: engine_demo_table
Create  Table: CREATE TABLE 'engine_demo_table' (
	'i' int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

4.总结

MySQL 采用客户端/服务端架构,用户通过客户端程序发送增删改查请求,服务器程序收到请求后处理,并且把处理结果返回给客户端。

MySQL 安装目录的 bin 目录下存放了需多可执行文件,其中有一些是服务端程序,有一些时客户端程序。

类 UNIX 系统上启动服务器程序的方式:

  • mysqld
  • mysqld_safe
  • mysqld.server
  • mysqld_multi

在 Windows 系统上启动服务器程序的方式:

  • mysqld
  • 将 muyqld 注册为 Windows 服务
    • net start mysqld
    • net stop mysqld

启动客户端程序常用语法:

mysql -h 主机名 -u 用户名 -p密码

客户端进程和服务器进程通信方式:

  • TCP/IP
  • 命名管道或共享内存
  • UNIX 域套接字

以查询请求为例,服务器程序在处理客户端发送过来的请求时,大致分为以下几个部分。

  • 连接管理:主要负责连接的建立与信息的认证
  • 解析与优化:主要进行查询缓存、语法解析、查询优化
  • 存储引擎:主要负责读取和写入底层表中的数据

MySQL 支持的存储引擎有好多种,它们的功能各有侧重,我们常用的就是 InnoDB 和 MyISAM,其中 InnoDB 是服务器程序的默认存储引擎。

存储引擎常用用法:

  • 查看当前服务器程序支持的存储引擎:

    SHOW ENGINE;

  • 创建表时指定表的存储引擎:

    CREATE TABLE 表名 (
    	建表语句
    ) EGINE=存储引擎名称;
    
  • 修改表的存储引擎

    ALTER TABLE 表名 ENGINE=存储引擎名称;


http://www.kler.cn/a/105812.html

相关文章:

  • 鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
  • C# 面向对象
  • 2411rust,1.80
  • 【原创】如何备份和还原Ubuntu系统,非常详细!!
  • MySQL 怎么不丢数据(关于开启双1配置)
  • Vulnhub靶场案例渗透[9]- HackableIII
  • Leetcode链表问题汇总
  • AI口语APP的实现
  • 嵌入式面试3(C++相关)
  • 前端入门(一)JavaScript语法、数据类型、运算、函数
  • openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)
  • 前端性别判断
  • SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)
  • Runner GoUI自动化测试发布
  • Talk | 纽约州立宾汉姆顿大学博士生丁琰:开放环境中机器人的任务与动作规划
  • 一致性hash算法
  • 搜维尔科技:【应用】配备MTi-3的轻便型ROV,在水下进行地理标记视觉检测
  • Vue3-小兔鲜项目
  • 【Linux】安装部署Redis
  • 思维导图软件 ConceptDraw MINDMAP mac中文特色介绍
  • 时序预测 | Python实现ARIMA-LSTM自回归移动差分模型结合长短期记忆神经网络时间序列预测
  • linux 音视频架构 linux音视频开发
  • 程序包com.sun.xml.internal.bind.marshaller不存在
  • 什么是框架和库?
  • Java注解及自定义注解
  • 什么是IO多路复用?Redis中对于IO多路复用的应用?