Mysql 学习(一)基础知识(待更新)

news2024/11/25 7:12:00

文章目录

  • 服务端处理客户端请求
  • 启动项
  • 系统变量
  • 启动项和系统变量的区别
  • 常见的字符集
  • 字符集
  • 比较规则

服务端处理客户端请求

  • 客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。其中大概有三步
    • 连接
    • sql 解析与优化
    • 存储引擎
      在这里插入图片描述
  • 连接管理
    • 每当有一个客户端连接到服务器时,服务器都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务端断开连接,服务端不会立即把线程销毁,而是缓存起来,当下一次连接来的时候再分配,但是线程分配太多的话就会影响线程,所以我们还需要限制一下可以连接服务器的数量
    • 在客户端程序发起连接的时候,需要携带主机信息、用户名、密码,服务器程序会对客户端程序提供的这些信息进行认证,如果认证失败,服务器程序会拒绝连接。另外,如果客户端程序和服务器程序不运行在一台计算机上,我们还可以采用使用了SSL(安全套接字)的网络连接进行通信,来保证数据传输的安全性。
  • 解析与优化
    • 查询缓存
      • Mysql服务器处理查询请求的过程,会把刚刚处理过的查询请求和结果缓存,如果有一摸一样的请求,就直接从缓存中查找结果
      • 缺点:如果两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。另外,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。
    • 语法解析
      • MySQL服务器程序首先要对这段文本做分析,判断请求的语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上来。
    • 查询优化
      • mysql 会给予你的语句进行一些优化,比如外连接转成内连接,子查询转为连接等等的一堆东西。优化的结果就是生成一个执行计划,这个计划表明了应该使用哪些索引进行查询等等优化方案,我们可以使用explan语句来查看某个语句的执行计划
  • 存储引擎
    • 介绍:
      • mysql 把数据的存储和提取操作,放到存储引擎里面,我们逻辑上表是一行行的数据,但是物理上并不是按照这样存储的,具体怎么存储是要根据存储引擎的存储规则存储的,为了实现不同的功能,mysql也有不同的存储引擎管理不同场景下的表格,存储算法也不一样。
      • 各种不同的存储引擎向上面的MySQL server层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数,像"读取索引第一条内容"、“读取索引下一条内容”、"插入记录"等等。
    • 常用存储引擎:
      在这里插入图片描述
    • 实用命令
      • SHOW ENGINES;
        • Support 表示该存储引擎是否可用
        • Default 表示当前服务器程序的默认存储引擎
        • Comment 表示对存储引擎的一种描述
        • Transactions 表示该存储引擎是否支持事务处理
        • XA 表示该存储引擎是否支持分布式事务
        • Savepoints 表示该列是否支持部分事务回滚
          在这里插入图片描述
      • 设置表的存储引擎
        • 存储引擎是负责对表中的数据进行提取和写入的,我们可以为不同的表设置不同的存储引擎,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。
        • 建表语句:CREATE TABLE 表名( 建表语句) ENGINE = 存储引擎名称;
        • 修改表的存储引擎:ALTER TABLE 表名 ENGINE = 存储引擎名称;

启动项

  • MySQL的服务器程序和客户端程序也有很多设置项,比如对于MySQL服务器程序,我们可以指定诸如允许同时连入的客户端数量、客户端和服务器通信方式、表的默认存储引擎、查询缓存的大小等设置项。对于MySQL客户端程序,我们之前已经见识过了,可以指定需要连接的服务器程序所在主机的主机名或IP地址、用户名及密码等信息。
  • 在命令行上使用选项:
    • 在启动服务器的命令后面加上指定启动选项的通用格式:--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]也就是说我们可以将各个启动选项写到一行中,各个启动选项之间使用空白字符隔开,在每一个启动选项名称前面添加–。
    • 举个例子:
      • 如果要修改表的默认存储引擎的话,使用下面的语句:mysqld --default-storage-engine=MyISAM
    • 每个MySQL程序都有许多不同的选项。大多数程序提供了一个–help选项,你可以查看该程序支持的全部启动选项以及它们的默认值。mysql --help
    • 前面举例子的 default-storage-engine 称之为长形式的选项,设计师为了让我们使用方便,会提供一些短的形式,例如:
      在这里插入图片描述
  • 配置文件使用选项:
    • 在命令行中设置启动选项只对当次启动生效,也就是说如果下一次重启程序的时候我们还想保留这些启动选项的话,还得重复把这些选项写到启动命令行中,这样真的很烦呀!于是设计MySQL的大佬们提出一种配置文件(也称为选项文件)的概念,我们把需要设置的启动选项都写在这个配置文件中,每次启动服务器的时候都从这个文件里加载相应的启动选项。由于这个配置文件可以长久的保存在计算机的硬盘里,所以只需我们配置一次,以后就都不用显式的把启动选项都写在启动命令行中了,所以我们推荐使用配置文件的方式来设置启动选项。
    • Windows操作系统的配置文件:
      • 在Windows操作系统中,MySQL会按照下列路径来寻找配置文件:
        在这里插入图片描述
    • 类Unix操作系统中的配置文件:
      • 在类UNIX操作系统中,MySQL会按照下列路径来寻找配置文件:
        在这里插入图片描述
    • 配置文件的内容:
      • 与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]扩起来
        在这里插入图片描述
      • 在配置文件中指定启动选项的语法类似于命令行语法,但是配置文件中只能使用长形式的选项。在配置文件中指定的启动选项不允许加–前缀,并且每行只指定一个选项,而且=周围可以有空白字符(命令行中选项名、=、选项值之间不允许有空白字符)。另外,在配置文件中,我们可以使用#来添加注释,从#出现直到行尾的内容都属于注释内容,读取配置文件时会忽略这些注释内容。为了大家更容易对比启动选项在命令行和配置文件中指定的区别,我们再把命令行中指定option1和option2两个选项的格式写一遍看看:在这里插入图片描述

系统变量

  • MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量,比如允许同时连入的客户端数量用系统变量max_connections表示,表的默认存储引擎用系统变量default_storage_engine表示,查询缓存的大小用系统变量query_cache_size表示,MySQL服务器程序的系统变量有好几百条,我们就不一一列举了。每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动它。
  • 查看系统变量:
    • 我们可以使用下列命令查看MySQL服务器程序支持的系统变量以及它们的当前值 SHOW VARIABLES [LIKE 匹配的模式];
      在这里插入图片描述
  • 设置系统变量:
    • 大部分的系统变量都可以通过启动服务器时传送启动选项的方式来进行设置。
      • 通过命令行添加启动选项。
        在这里插入图片描述

      • 通过配置文件添加启动选项。
        在这里插入图片描述

启动项和系统变量的区别

  • 启动选项是在程序启动时我们程序员传递的一些参数,而系统变量是影响服务器程序运行行为的变量
  • 大部分的系统变量都可以被当作启动选项传入
  • 有些系统变量是在程序运行过程中自动生成的,是不可以当作启动选项来设置,比如auto_increment_offset、character_set_client等。
  • 有些启动选项也不是系统变量,比如defaults-file。

常见的字符集

  • ASCII字符集
  • ISO 8859-1字符集
  • GB2312字符集
  • GBK字符集
  • utf8字符集

字符集

  • 因为计算机只能存储二进制数据,如果要存储数据就只能存储二进制数据,当然还需要一个二进制数据跟字符的映射关系,建立这个关系还有几个问题
    • 你要把哪些字符映射成二进制数据?
      • 也就是界定清楚字符范围。
    • 怎么映射?
      • 将一个字符映射成一个二进制数据的过程也叫做编码,将一个二进制数据映射到一个字符的过程叫做解码。
    • 举个例子:
      在这里插入图片描述

比较规则

  • 在我们确定了xiaohaizi字符集表示字符的范围以及编码规则后,怎么比较两个字符的大小呢?最容易想到的就是直接比较这两个字符对应的二进制编码的大小,比方说字符’a’的编码为0x01,字符’b’的编码为0x02,所以’a’小于’b’,这种简单的比较规则也可以被称为二进制比较规则,英文名为binary collation。
    • 二进制比较规则是简单,但有时候并不符合现实需求,比如在很多场合对于英文字符我们都是不区分大小写的,也就是说’a’和’A’是相等的,在这种场合下就不能简单粗暴的使用二进制比较规则了,这时候我们可以这样指定比较规则:
      • 将两个大小写不同的字符全都转为大写或者小写。
      • 再比较这两个字符对应的二进制数据。
    • 这是一种稍微复杂一点点的比较规则,但是实际生活中的字符不止英文字符一种,比如我们的汉字有几万之多,对于某一种字符集来说,比较两个字符大小的规则可以制定出很多种,也就是说同一种字符集可以有多种比较规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea使用样式主题

目的 花里胡哨的idea显示主题 安装插件 在preferences>plugins中搜索“Material Theme”安装两个中的一个 重启>设置>选择主题 对比度(多选) Contrast Mode:对比度模式,目录结构,选项卡等非文本选择前后的颜色对比度。…

Docker部署RabbitMQ(单机,集群,仲裁队列)

RabbitMQ部署指南 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 在课前资料已经提供了镜像包: 上传到虚拟机中后,使用命令加载镜…

【论文阅读】(20230410-20230416)论文阅读简单记录和汇总

(20230410-20230416)论文阅读简单记录和汇总 2023/04/09:很久没有动笔写东西了,这两周就要被抓着汇报了,痛苦啊呜呜呜呜呜 目录 (CVPR 2023): Temporal Interpolation Is All You Need for Dynamic Neural Radiance …

RPC 漫谈:序列化问题

RPC 漫谈:序列化问题 何为序列 对于计算机而言,一切数据皆为二进制序列。但编程人员为了以人类可读可控的形式处理这些二进制数据,于是发明了数据类型和结构的概念,数据类型用以标注一段二进制数据的解析方式,数据结…

echarts formatter如何自定义百分比小数位置,比如取整数。{b} {d}%

echarts formatter如何自定义百分比小数位置,比如取整数。{b} {d}% 一、现状 我有一个 pie 的图表,option 中的 formatter 是这样的: label: {show: true,position: outside,fontSize: 12,formatter: {b} {d}% },图表数据是这样的 二、需…

获取本地电脑连接的所有WIFI密码(适合Windows 11/10/8/7)

背景 如果你的心入职同事问你公司WIFI密码是多少,恰好这时你也忘记密码,用次方法可以实现得到WIFI密码。 如果你忘记现在在WIFI密码,也可以用此方法获取。 实现 1. 使用管理员权限打开 cmd.exe 2. 获取本机所有连接的 WIFI 用户配置 ne…

如何交叉编译程序:以freetype为例

【记录所学】 本博客为学习Linux开发时的笔记。主要记录如何交叉编译程序。 内容会首先介绍程序运行的一些基础知识,其次介绍常见错误的解决方法,然后介绍交叉编译程序的万能命令,最后以一个实际例子介绍如何交叉编译程序。 简要说明&#…

使用篇丨链路追踪(Tracing)很简单:链路实时分析、监控与告警

作者:涯海 前文回顾: 基础篇|链路追踪(Tracing)其实很简单 使用篇|链路追踪(Tracing)其实很简单:请求轨迹回溯与多维链路筛选 在前面文章里面,我们介绍了…

快排非递归 归并排序

递归深度太深会栈溢出 程序是对的&#xff0c;但是递归个10000层就是栈溢出 int fun(int n) {if (n < 1){return n;}return fun(n - 1) n; }所以需要非递归来搞快排和归并&#xff0c;在效率方面没什么影响&#xff0c;只是解决递归深度太深的栈溢出问题 有的能直接改&am…

2023年Android开发现状~

随着Android 开发行业的快速发展&#xff0c;市场需求也在不断提升&#xff0c;导致低端Android 开发市场就业大环境不好、行业趋势下滑&#xff0c;使得不少初中级的Android开发开始失业&#xff0c;找不到工作。 为什么这么说&#xff1f; 现在不像2012年——2018年的这段期…

性能调优通用逻辑

调优准备 定目标&#xff1a;根据线上预估访问量评估单场景QPS及混合场景QPS&#xff0c;和对应的RT值 环境区分&#xff1a; 测试环境单机压测进行链路问题排查问题&#xff0c;通常需要把单机打到CPU到100%&#xff0c;如果CPU到不了100%且请求已经各种超时或RT高于目标值…

Voting_Averaging算法预测银行客户流失率

Voting_Averaging算法预测银行客户流失率 描述 为了防止银行的客户流失&#xff0c;通过数据分析&#xff0c;识别并可视化哪些因素导致了客户流失&#xff0c;并通过建立一个预测模型&#xff0c;识别客户是否会流失&#xff0c;流失的概率有多大。以便银行的客户服务部门更…

【大型互联网应用轻量级架构实战の一】轻量级架构概述

1、轻量级架构概述 1.1.1、前言 当下&#xff0c;互联网应用呈高速发展的趋势&#xff0c;要想不被市场淘汰&#xff0c;就必须与时间赛跑&#xff0c;故而&#xff0c;快 就成了所有互联网公司产品的特征&#xff0c;只有率先推出产品&#xff0c;才能获取主动权。 1.1.2、…

大模型时代下的paper生存= =

第一类&#xff1a;PEFT类论文 &#xff08;我还挺喜欢的&#xff0c;不知道自己什么时候可以搞出这种工作 &#xff08;为什么中英文穿插&#xff0c;利于自己写论文&#xff1a;&#xff09; COMPOSITIONAL P ROMPT T UNING WITH M OTIONC UES FOR O PEN - VOCABULARY V ID…

构建数字时代下的必要防线 消除医疗行业数据安全建设“盲区”

4月7日&#xff0c;由厦门市卫生健康信息学会和厦门大学附属第一医院、厦门服云信息科技有限公司举办的医疗数据安全学术研讨会顺利开展。 作为国内云原生安全领导厂商&#xff0c;安全狗除了协助举办此次活动&#xff0c;还以数据安全治理专家的身份参与演讲分享。 厦门服云…

全网最详细,Jmeter性能测试-性能进阶, 无界面命令运行CLI模式(六)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 如果使用jmeter.bat…

代码随想录算法训练营第四十一天-动态规划3|343. 整数拆分 ,96.不同的二叉搜索树

343整数拆分&#xff0c;有两种解法&#xff0c;一种是数学的方法&#xff0c;利用当f>4时&#xff0c;2*&#xff08;f - 2&#xff09;2f - 4 > f的性质&#xff0c;将所有的因子都拆成3&#xff0c;最后的余数再乘进去。另外一种是动态规划&#xff0c;把前面的数拆了…

算法---文件的最长绝对路径

题目 假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例&#xff1a; 这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1&#xff1b;subdir2 包含子目录 subsubdir2&…

PHP快速入门11-文件操作,附写入文件、文件重命名等20个高频使用案例

文章目录前言一、文件操作介绍二、 20个文件操作的例子2.1 打开文件并写入数据2.2 读取文件中的一行数据2.3 读取文件中的一个字符2.4 读取整个文件内容2.5 向文件写入内容2.6 将整个文件读入一个数组中2.7 删除文件2.8 重命名文件2.9 复制文件2.10 判断是否为文件2.11 判断是否…

【致敬未来的攻城狮计划】RA2E1环境搭建点亮发光二极管

开启攻城狮的成长之旅&#xff01;这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU &#xff08;瑞萨电子 (Renesas Electronics Corporation) &#xff09; 联合发起的「 致敬未来的攻城狮计划 」的第 2 天&#xff0c;点击查看活动计划详情 &#xff01; 开发环境搭建 开…