书名《MySQL是怎样运行的:从根儿上理解MySQL》可自行百度

以下是知识点总结

重新认识Mysql

MySQL是一个C/S架构的软件。

在Windows安装后首先注册成服务,然后会在开机后自启动。

启动MySQL服务端。

直接在bin目录下执行mysqld 或者在配置文件my.ini中设置一些默认的启动参数。

  • 在MySQL安装目录的bin下使用mysqld指令启动MySQL服务,Windows版没有mysqld_safe这些,它会在最后调用mysqld,但是会在其之前启动监控程序,本质是一样的。
  • 定义环境变量,直接使用mysqld,就可以在随地使用bin下的命令。比较方便。

启动MySQL客户端。

在bin目录下,使用命令 mysql -uroot -p1111 即使用TCP/IP连上本地的Mysql,如果需要指定IP和端口的话 mysql -hlocalhost -P3306 -uroot -p11111

  • 一种是TCP/IP。指定IP和端口,使用TCP/IP和服务端连接和交互。
  • 其他的管道和共享内存,类UNIX使用socket连接。

服务器处理客户端请求

  1. 首先客户端向服务器端发送内容。
  2. 服务器端接收后通过连接管理,分配一个连接给当前请求的进程。
  3. 服务器端进行解析,语句优化,缓存匹配(匹配成功就会直接返回)。
  4. 服务器端进行进行解析语句,形成一个explain,然后由存储引擎去执行explain,然后返回结果。

常用的存储引擎

  • InnoDB,即是mysql 的默认存储引擎,支持事务回滚。
  • MyISAM,等等。

Mysql的调控按钮

启动选项的两种方式

  • 命令行的方式
  • 配置文件方式

一种是服务端的启动,即mysqld 的方式启动。

我们可以直接在命令行后面使用 --参数=参数1。具体参数可以使用mysqld --help

还有就是配置文件的方式,配置文件中存放了各种命令的启动参数,在启动时就会进行启动参数的初始化。

举例mysqld,mysqld配置文件中会加载[mysqld]组和[server]组的启动参数。当出现重复的启动参数时,就会后续加载的参数就会直接覆盖前面的参数。加载顺序是[mysqld] -> [server] -> 命令行。

系统变量

其中呢启动项大部分是设置一些系统变量的。系统变量就是调控mysql运行的重要参数。比如设置存储引擎,设置最大接收的线程数。

同时呢系统变量也分两类GLOBAL和SESSION。

GLOBAL的系统变量就是MySQL服务器的系统变量,当有一个新的客户端连接到服务器时,就会为客户端创建一个SESSION,并用GLOBAL初始化SESSION系统变量。客户端可以根据自身需求来更新系统变量,如果希望更改全局的系统变量就变更GLOBAL。

set @@GLOBAL.default-storage-engine=InnoDB
# 这样更新全局后续连接都会根据此更新,已经有的连接不会变更。同时变更当前会话的就改成SESSION

状态变量

简而言之就是MySQL记录当前服务端的状态的变量,这些状态变量只能由MySQL来设置,客户端可以对其进行查看来监控MySQL。

字符集和比较规则

我们举例客户端向服务端发送一段SQL。

一段字符串要在进程中通信,就需要对其进行按照一定规则编码成0101,然后传送到服务器端,服务器端需要在根据其编码规则在进行解码,将其还原成字符串。

MySQL中支持很多的字符集,可以使用 show charset; 命令进行查看。

MySQL8.0.22中支持41种字符集。下面列举一部分,最常见和最熟知的就是utf8了,但是在MySQL中utf8是对创始人对其进行的删减,真正的是utf8mb4需要注意。

utf32 UTF-32 Unicode utf32_general_ci 4

utf8 UTF-8 Unicode utf8_general_ci 3

utf8mb4 UTF-8 Unicode utf8mb4_0900_ai_ci 4

每一种字符集对应着多种比较规则,但是每一种比较规则只对应着一种字符集。

字符集分为多个级别。

  1. 服务端的字符集,为最高级别的字符集。

  1. 数据库的字符集,可以指定,也可以默认为服务端的字符集
  2. 表的字符集,可以指定,也可以默认为数据库的字符集
  3. 列的字符集,同样默认表的字符集

客户端和服务器端通信中的字符集

客户端发送信息到服务端的流程

  1. 首先客户端发送字符串,先经过操作系统编码(Windows编码方式为gbk,类unix为uft8)后,发送到服务端。
  2. 服务端接收到请求,根据character_set_client的字符集进行解码,然后转码成character_set_connection的字符集,然后由character_set_connection交给存储引擎。
  3. 存储引擎得到结果后,返回根据character_set_result进行编码发送到客户端。

在实际的连接中通常就是上面提到的系统变量都是和操作系统的字符集是一样的。

比较规则

比较规则就是进行比较的规则,当出现排序预期和我们想象的不一样,可能就是出现了比较规则的错误,可能需要更换比较规则。

MySQL深入学习-day1的更多相关文章

  1. MySQL事务学习-->隔离级别

    MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...

  2. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Mysql事件学习

    出自:http://blog.chinaunix.net/uid-20639775-id-3323098.html Mysql事件学习 在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQ ...

  6. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  7. MySQL数据库学习: 01 —— 数据库的概述

    壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...

  8. 一个很好的MySQL在线学习平台

    一个很好的MySQL在线学习平台 https://www.techonthenet.com/sql/

  9. MySQL基础学习笔记

    一.数据库基本概念 1.1 数据库 - Database 从字面意思看,数据库就是一个存储数据的仓库.从计算机的角度来讲,数据库(Datebase)是按照数据结构来组织.存储和管理数据的仓库. 简单来 ...

随机推荐

  1. Python 与 C++ 向量

    Python 与 C++ 向量 Python 和 C++ 对比 我们再回到向量!你已经学习了如何声明一个空的向量. 在下面的代码中,你可以比较 Python 列表和 C++ 向量的语法.你会看到,C+ ...

  2. 大数据学习之路之ambari配置(四)

    试了很多遍,内存还是不够,电脑不太行的,不建议用ambari!!! 放弃了

  3. 界面跳转+信息传递+AS中如何将ADV转移到其他盘中

    今日所学:界面跳转 信息传递 遇到的问题: 昨天遇到不能新建java类,在网上百度了很多,大多原因是没有新建java类的模板,但是我有,换了一个新的新建的方式后,发现虽然能建立了,但在测试时还是不能页 ...

  4. springMVC中获取request和response对象的几种方式(RequestContextHolder)

    springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...

  5. mysql在cmd中查询到的汉字乱码问题解决 方法一

    只要执行如上两个 set character_set_connection = gbk; set character_set_results= gbk; 将编码格式转换成gbk即可

  6. java如何读取和遍历properties文件

    在java项目开发过程中,使用properties文件作为配置基本上是必不可少的,很多如系统配置信息,文件上传配置信息等等都是以这种方式进行保存.同时学会操作properties文件也是java基础. ...

  7. vue中判断页面滚动开始和结束

    参考链接:https://www.jianshu.com/p/adad39705ced    和  https://blog.csdn.net/weixin_44309374/article/deta ...

  8. 如何用CSS实现左侧宽度固定,右侧自适应(两栏布局)?左右固定中间自适应(三栏布局)呢?

    在前端日常布局中,会经常遇到左侧宽度固定,右侧自适应或者左右两边固定,中间部分自适应的实用场景.本文例子中将列举出两种常用的两栏布局,左侧固定右侧自适应的常用方法以及代码和五种左右固定中间自适应的常用 ...

  9. 使用nmtui命令解决network-scripts目录下无网卡对应配置文件问题

    //网卡通过命令ifconfig可以识别到,但是在配置文件目录下,没有该文件,一旦重启等配置了该地址的应用则可能会出现问题所以需要重新生成对应配置文件,我首先想到的就是用 nmtui 这个程序来重新生 ...

  10. MySQL 社区版

    MySQL 社区版 MySQL 社区版是全球广受欢迎的开源数据库的免费下载版本.它遵循 GPL 许可协议,由庞大.活跃的开源开发人员社区提供支持. MySQL 社区版包括: 可插拔的存储引擎架构 多种 ...