书名《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. 使用Ansible部署openstack平台

    使用Ansible部署openstack平台 本周没啥博客水了,就放个云计算的作业上来吧(偷个懒) 案例描述 1.了解高可用OpenStack平台架构 2.了解Ansible部署工具的使用 3.使用A ...

  2. 阿里云场景化阿里云企业数字化转型售前方法PSA

    阿里云场景化阿里云企业数字化转型售前方法PSA 目录 01 课程收获 理解企业数字化转型的概念.内涵.本质 了解企业数字化转型的要点.目标和切入点 掌握数字化转型项目售前阶段实践方法 场景化方案 阿里 ...

  3. 探索前端黑科技——通过 png 图的 rgba 值缓存数据

    本文系原创,欢迎转载,转载请注明作者信息项目地址:SphinxJS在线体验地址:https://jrainlau.github.io/sp... 说起前端缓存,大部分人想到的无非是几个常规的方案,比如 ...

  4. 【转自百度fex】fex-team/interview-questions

    fex-team/interview-questions 注意 目前发现有其他人以 FEX 团队名义进行招聘,发出的邮箱皆为私人邮箱. 为防止在投递简历出现误会,在此提醒各位注意: FEX 团队没有以 ...

  5. 使用Canvas和JavaScript做一个画板

    本文同步于个人博客:https://zhoushuo.me/blog/2018/03/11/drawing-borad/ 前些天学习了HTML5的<canvas>元素,今天就来实践一下,用 ...

  6. C# 将Excel转为PDF时设置内容适应页面宽度

    将Excel转为PDF格式时,通常情况下转换出来的PDF页面都是默认的宽度大小:如果Excel表格数据的设计或布局比较宽或者数据内较少的情况,转出来的PDF要么会将原本的一个表格分割显示在两个页面,或 ...

  7. This program may be freely redistributed under the terms of the GNU GPL

    在centos中安装Google浏览器时 执行[root@server1 opt]# rpm ivh install google-chrome-stable_current_x86_64.rpm 爆 ...

  8. java中Object类的getClass方法有什么用以及怎么使用?

    Object类的getClass的用法: Object类中有一个getClass方法,m  a  r  k- t  o- w i n:它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象 ...

  9. 【jenkins】04.SSH认证方式拉取Git代码

    首先需要会git ssh 我们一般用http的形式拉取代码. ssh的好处就是不用每次输入密码,而且貌似会快丢丢,不知道是不是错觉. 大概需要三个步骤: 一.本地生成密钥对: 二.设置github上的 ...

  10. Linux Red Hat 8.0虚拟机安装过程

    Linux Red Hat 8.0虚拟机安装过程 一.安装虚拟机所需要的工具: 1.VMware Workstation Pro 2.Red Hat 8.0 虚拟机镜像 3.还有一个就是VMware的 ...