MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录
一、mysql设计模式和技术
二、mysql服务器和客户端
启动mysql服务
启动mysql客户端程序
三、mysql存储引擎
四、mysql配置
五、mysql系统变量
六、mysql字符集
编码和解码:
常见字符集(五种):
相关概念:
mysql字符集要点:
mysql字符集(客户端和服务端):
一、mysql设计模式和技术
### 1. 设计模式:采用c/s设计模式,客户端通过用户的输入来和服务器进行通信交互,服务器则负责处理请求、解析、运算、存储和返回响应结果给客户端。### 2. 所涉及的技术:TCP/IP技术:由c/s模式决定的;进程通信技术:像命名管道和共享内存(windows)、UNIX于套接字(类UNIX),因为服务器程序和客户端程序启动后实际上是两个进程
二、mysql服务器和客户端
启动mysql服务
### 1.导入:
即启动mysql服务器程序,通过服务器文件(大部分在安装的bin目录下)来启动,下面我们根据不同系统来了解认识
### 2.类UNIX系统:
mysqld:启动一个mysql服务器进程
mysqld_safe:间接调用mysqld,监控错误并重启服务,错误日志写入
mysql.server:间接调用mysqld_safe,相关命令为mysql.server start/stop
mysqld_multi:多个进程服务
### 3.windows系统:
## 2.1 mysqld.exe:
同类UNIX的mysqld,mysqld --console(启动将错误日志输入到cmd控制台)
## 2.2 注册为服务来启动:
注册服务语句:"完整的可执行文件路径" --install [-manual] [服务名称]
描述:其中-manual选项表示手动,不添加该选项则开机自启,服务名称默认为MySQL
示例语句:"C:\Program files\MySQL\MySQL Server 5.7\bin\mysqld" --install
net命令操作控制服务:net start/stop MySQL(MySQL是服务名)
启动mysql客户端程序
### 1. mysql客户端程序:
mysql、mysqladmin、mysqldump、mysqlcheck等### 2. 启动客户端连接服务器:
mysql -uroot -p密码(显式,不安全)
mysql -uroot -p(密式)
### 3. 了解连接服务器的参数(短形式/长形式)
-u/--user=用户名:用户参数
-p/--password=端口号:密码参数
-h/--host=主机名:IP或域名参数
示例:mysql -uroot -p 或者 mysql --user=root -p
三、mysql存储引擎
### 1.存储引擎
有很多,只需了解InnoDB和MyISAM即可,查看语句show engines;
### 2.版本变化
MySQL>=5.5.5:InnoDB
MySQL<5.5.5:MyISAM
可以看出现在主要使用InnoDB
### 3.InnoDB和MyISAM的定位
InnoDB:支持事务、行级锁、外键
MyISAM:主要的非事务处理存储引擎
### 4.相关语句
## 指定表的存储引擎
create table 表名(...
)engine=引擎名称
alter table 表名 engine=引擎名称
## 查看表的结构(含存储引擎)
show create table 表名\G
四、mysql配置
### 1.配置方式
mysql的配置可以通过【启动项】和【配置文件】来实现。
启动项:通过命令行指定选项,仅对当次启动生效(没有保存到硬盘),即重启失效;
配置文件:把选项写入配置文件,在每次启动时都会被读取应用;
### 2.命令行配置启动项(选项)规范
格式:命令 --启动项1=[值1] --启动项2=[值2]
示例:mysqld --skip-networking(禁止TCP/IP网络通信)
## 选项名称规范
--skip-networking就是启动项名称(选项名称),选项名称由多个单词构成,中间可以使用“-”或“_”(短划线或下划线)连接,即也可以写为--skip_networking
## 选项值规范
不是所有的选项都是有值的如上例命令,如果有值比如【--选项名=选项值】,反则省略含等号以后内容
## 衔接规范
选项(无论是短形式还是长形式)都要满足选项名后紧跟选项值,示例:mysql -u root -p
使用长形式即【--选项名=选项值】中间不能有任何空格
### 3.查看程序启动项
mysql --help
mysqld_safe --help
mysqld --verbose --help(特殊)
### 4.选项常用的长形式-短形式
--user -u
--password -p
--port -P
--host -H
--version -V
### 5.配置文件的读取顺序
## windows
%WINDIR%\my.ini,%WINDIR%\my.cnf【这个%WINDIR%就是一个系统变量,我们可以查看一下:echo %WINDIR%】
C:\my.ini,C:\my.cnf
BASEDIR\my.ini,BASEDIR\my.cnf 【BASEDIR是你MySQL的安装路径】
defaults-extra-file 【这个用于命令行指定配置文件,例如:mysqld --defaults-extra-file=C:\my.txt】
%APPDATA%\MySQL\.mylogin.cnf 【仅限客户端】
上面这些路径会由上到下依次读取,所以越靠后权重越大,以靠后配置为准(覆盖式)
## 类NUIX
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf 【仅限服务器】
default-extra-file 【命令行指定配置文件】
~/.my.cnf 【登录用户独有】
~/.mylogin.cnf 【仅限客户端】
上面这些路径会由上到下依次读取,所以越靠后权重越大,以靠后配置为准(覆盖式)
### 6.配置文件配置启动项规范
## 格式
[组名]
选项名称
选项名称=选项值
## 选项名称规范
不能用缩写(短形式),不允许加“--”(双短划线)
## 衔接规范
【选项名称=选项值】中间可以有空格,每行只能写一个选项
## 注释
行首使用"#"来进行注释
### 7.配置文件选项组
即前面规范格式所展示的就是一个选项组格式
[mysqld]:应用于服务器的配置项
[mysql]:应用于客户端的配置项
[server]:应用于服务器的配置项
[client]:应用于客户端的配置项
如果选项组里面出现了相同的选项,则以后面出现的选项配置为准
### 8.指定搜索配置文件
mysqld --default-file=文件路径
与--default-extra-file不同的是只搜索给定路径的配置文件
### 9.命令行启动项和配置文件的区别
(1) 有些针对于命令行应用的配置项是配置文件没有的;
(2) 命令行方式是临时作用的,而配置文件方式是持久作用的;
(3) 命令行会覆盖与之相同的配置文件选项,当然是临时作用的;
五、mysql系统变量
### 1. 导入:
了解mysql的系统变量,我们可以熟悉当前版本的默认功能行为
### 2.查看系统变量:
show variables [like 匹配模式]
## 3.系统变量分类
按作用域分:全局、会话(部分)
按时效分:临时【命令行】、持久【配置文件】
### 4.设置系统变量
(1)通过启动项设置:命令行方式、配置文件方式
(2)服务器运行过程中命令设置:set [global|session] 系统变量名=值; 【作用域默认为session】
### 5.系统变量规范
虽然我们通过启动项设置系统变量时,多个单词的变量名可以用“-”或“_”连接,
但是他们在内部都会转换成“_”连接的形式,所以我们查看时要用“_”连接的系统变量名。
示例:show variables like 'max_connections';【设置时可以mysqld --max-connects=10】
### 6.系统变量和启动项
(1) 有些系统变量是运行过程中生成的,不能通过启动项来设置,如:character_set_client
(2) 启动项是程序启动传递的配置参数,而系统变量是支持和决定程序运行行为的变量
(3) 有些启动项也不是程序运行所需的,也就不是系统变量,如:defaults-file
### 7. 补充:状态变量
指我们不能设置改变的变量,由程序内部自己设置的变量,我们可以查看来了解服务器程序的运行状况
show [global|session] status [like 匹配模式];
六、mysql字符集
编码和解码:
编码:将字符映射为二进制数据的过程
解码:将二进制数据映射到字符的过程
常见字符集(五种):
ASCII:字符数范围0~128,1字节表示
Latin1(ISO 8859-1):字符数范围为0~256,1-2字节表示
GB2312:字符数范围6763(汉字)+682,1-2字节表示
GBK:在GB2312基础上的扩充(兼容),1-2字节表示
Unicode:世界级字符收编,UTF-8(1-4字节)、UTF-16(2-4字节)、UTF-32(4字节)
相关概念:
(1) 变长编码方式:
指使用不同字节数来表示一个字符的编码方式,比如上面提到的GB2312、Unicode
(2) 为什么有变长编码方式:
无非是兼容,比如Latin1用1-2字节表示,1字节表示就是因为兼容ASCII
mysql字符集要点:
### 1. mysql中的UTF-8
utf8mb3:阉割过的UTF-8字符集,用1-3字节表示,在mysql中utf8指的就是utf8mb3
utf8mb4:正宗的UTF-8字符集,用1-4字节表示
版本情况:MySQL>=8.0,将utf8mb4作为默认字符集
### 2.查看当前mysql支持的字符集
show (character set|charset) [like 匹配模式];
### 3.比较规则
一种字符集可以有多种比较规则,都有默认的比较规则
查看支持的比较规则:show collation [like 匹配模式];
示例:show collation like 'utf8\_%'(斜杠是转义符)
## 比较规则名称后缀含义
_ai accent insensitive 不区分重音
_as accent sensitive 区分重音
_ci case insensitive 不区分大小写
_cs case sensitive 区分大小写
_bin binary 以二进制大小比较
### 4. 字符集和比较规则
## 分类:
服务器级别、数据库级别、表级别、列级别
## 服务器级别:
(1) 相关系统变量:character_set_server(字符集)、collation_server(比较规则)
(2) 查看默认值:show variables where variable_name in('character_set_server','collation_server');
(3) 设置:启动项或配置文件方式
## 数据库级别
(1) 相关系统变量:character_set_database(字符集)、collation_database(比较规则)
(2) 查看默认值:要注意的是明确当前使用的数据库,使用【use 数据库】
(3) 设置:只能在创建数据库的时候指定默认字符集和比较规则(创建好之后修改语句无法作用),数据库级别默认是参考服务器级别的,所以我们一般默认就好
create database 数据库 character set 字符集 collation 比较规则;
## 表级别
(1) 查看:show table status from 数据库 like 表名;
(2) 设置:默认参考数据库级别的
create table 表名(...) character set 字符集 collation 比较规则;
## 列级别
(1) 查看:show full columns from 表名;
(2) 设置:默认参考表级别的
create table 表名(列名 类型 character set 字符集 collation 比较规则);
alter table 表名 modify 列名 类型 character set 字符集 collation 比较规则;
## 二者关系
字符集和比较规则是双向绑定的,如果修改了某个另一个也跟着改变
向上参考原则:列 >> 表 >> 数据库 >> 服务器
mysql字符集(客户端和服务端):
### 1.引入:
客户端和服务端之间进程通信发送数据会涉及到字符集的问题,于是出现了MySQL通信协议(规定了数据格式)
### 2.客户端字符集:
一般客户端请求编码字符集为操作系统当前使用的字符集
## 类UNIX
决定系统字符集的系统变量:LANG、LC_CTYPE、LC_ALL(优先级依次递增,以后者为准)
## Windows
字符集又称代码页
查看字符集:chcp
数值对应关系:936(GBK)、65001(UTF-8)
设置字符集:mysql -uroot -p --default-character-set=字符集;
### 3.服务器字符集
服务器主要维护了3个相关的字符:character_set_client、character_set_connection、character_set_result
## 连接:
当客户端和服务器建立连接后,在服务器会维护一个会话级别的变量来作为服务器响应的字符集,即character_set_client
## 处理:
处理请求时又会将character_set_client转换为会话级别的系统变量character_set_connection;
也就是用character_set_client字符集对请求数据解码,然后用character_set_connection字符集对数据进行编码;
与之对应的比较规则collation_connection。
## 响应
服务器处理请求后需要响应给客户端结果,这时又由系统变量character_set_result决定
## 总结:
所以来说只有保证连接、处理和响应三个环节的字符集一致才会保证顺利编解码和响应
## 一次性设置上面三个系统变量
set names 字符集;
### 4.字符集冲突
若客户端系统字符集、表字符集和列字符集冲突,则以【列字符集】为准(优先级更高)
### 5.字符集定义过程
客户端连接服务器(登录) >> 初始化客户端字符集并发送给服务器 >> 根据客户端字符集初始化服务器字符集(3个系统变量)
相关文章:

MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录 一、mysql设计模式和技术 二、mysql服务器和客户端 启动mysql服务 启动mysql客户端程序 三、mysql存储引擎 四、mysql配置 五、mysql系统变量 六、mysql字符集 编码和解码: 常见字符集(五种): 相关概念࿱…...

用Python制作邮件检测器
github地址: https://github.com/CaLlMeErIC/MailDetective 因为需求需要写一个简单的邮件检测系统的框架,这里记录下思路 首先第一反应,这个检测系统不应该是各个邮件收件系统都有自带的吗,于是搜索了下是否有相关的邮件检测开源软件&#…...

K8S---pod基础概念
目录 一、资源限制 二、Pod 的两种使用方式 三、Pod 资源共享 四、底层容器Pause 1、Pause共享资源 1.1 网络 1.2 存储 1.3 小结 2、Pause主要功能 3、Pod 与 Pause 结构的设计初衷 五、Pod容器的分类 1、基础容器(infrastructure container)…...

激活函数入门学习
本篇文章从外行工科的角度尽量详细剖析激活函数,希望不吝指教! 学习过程如下,先知道这个东西是什么,有什么用处,以及怎么使用它: 1. 为什么使用激活函数 2. 激活函数总类及优缺点 3. 如何选择激活函数 …...

小文智能结合ChatGPT的产业未来
最近几个月,由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在国内外各大平台掀起了一阵AI狂潮。短短几天时间,其用户量就突破了百万大关,注册用户之多一度导致服务器爆满。 继AI画图之后,ChatGPT成为了新的顶流…...

Linux-编写一个自己的命令
前言(1)在Linux中,我们对文件路径进行操作都需要输入命令。那么,有人可能就会有疑惑了,命令是什么东西?我们是否也可以创造出自己的命令呢?答案是可以的。命令本身其实就是可执行文件。但是与普…...

Nacos架构篇 - Distro协议
Distro 它是 Nacos 社区自研的一种 AP 分布式协议(也是最终一致性协议)。它面向临时实例,保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为一种有状态的中间件应用的内嵌协议,Distro 保证了…...

和月薪3W的聊过后,才知道自己一直在打杂...
前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 我了解了下他的面试过程,就一点,不管是阿里还是腾讯的面试,这个级别的程序员,都会考察项目管理能力,并且权重…...

关于Ubuntu18.04 root账户登录的问题
关于Ubuntu18.04 root账户登录的问题一、 Ubuntu 18.04添加root用户登录1. 设置root用户2. 修改/root/.profile3. 修改/etc/pam.d目录下的gdm-autologin和gdm-password4. 修改50-ubuntu.conf5. 登录root账户二、Ubuntu18.04不能远程使用root账户登录的问题1. 修改sshd_config2.…...

基于jeecgboot的flowable的H5版本在演示系统发布
目前在NBCIO 亿事达企业管理平台上发布了H5的在线演示系统,欢迎大家批评指正。 在nbcio-vue nbcio-vue: NBCIO 亿事达企业管理平台前端代码,基于ant-design-vue-jeecg的前端版本: 3.0.0代码和和flowable6.7.2,初步完成了集流程设…...

【代码训练营】day44 | 完全背包理论 518. 零钱兑换 II 377. 组合总和 Ⅳ
所用代码 java 完全背包 01背包物品只能使用一次 – 倒序遍历 for(i 0; i < weight.length; i){ 物品for (j bagWeight; j > weight[i]; j--){ 背包dp[j] max(dp[j], dp[j-weight[i]] value[i])} }完全背包物品可以使用无限次 – 正序遍历 for(i 0; i < weigh…...

ICA简介:独立成分分析
1. 简介 您是否曾经遇到过这样一种情况:您试图分析一个复杂且高度相关的数据集,却对信息量感到不知所措?这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术,可让您分离和识别多元数据集中的底层独立来源。 …...

②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 蓝桥杯真题--持续更新中...一、振兴中华二、三…...

PostgreSql 视图
一、概述 视图(View)本质上是一个存储在数据库中的查询语句。视图本身不包含数据,也被称为虚拟表。 我们在创建视图时给它指定了一个名称,然后可以像表一样对其进行查询。 优势: 不保存数据,节省空间。减少…...

【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分)
【PAT甲级题解记录】1150 Travelling Salesman Problem (25 分) 前言 Problem:1150 Travelling Salesman Problem (25 分) Tags:模拟 图的遍历 旅行商问题 Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1150 Travell…...

vue生命周期
vue生命周期是什么?Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。我们来看一下官网给的vue生命周期的…...

排查解决Java进程占用内存过高
排查解决Java进程占用内存过高1 在项目部署运行之前1 检查JVM参数设置2 检查代码逻辑3 使用内存分析工具4 检查线程5 调整应用程序的设计7 调整硬件资源2 在项目部署运行之后1 在项目部署运行之前 1 检查JVM参数设置 检查JVM的启动参数设置,包括-Xmx和-Xms参数&am…...

一个基于 LKM 的 Linux 内核级 rootkit 的实现
博客已迁移至:https://gls.show/ GitHub链接 演示Slides overview rootkit是一种恶意软件,攻击者可以在获得 root 或管理员权限后安装它,从而隐藏入侵并保持root权限访问。rootkit可以是用户级的,也可以是内核级的。关于rootk…...

CAN工具 - ValueCAN - 基础介绍(续)
VSpy3(Vehicle Spy 3的简写),作为一个常用的车载总线仿真工具,在车载网络领域也是有非常大的市场,前面也简单介绍过一些简单的功能,今天就再次介绍一些。什么是VSpy3?VSpy3是美国英特佩斯公司下…...

一个Laravel+vue免费开源的基于RABC控制的博客系统
项目介绍 CCENOTE 是一个使用 Vue3 Laravel8 开发的前后端分离的基于RABC权限控制管理的内容管理系统,由于作者本人比较喜欢写作的原因,因此开发了这个项目,后端使用的PHP的Laravel框架,并且整理了数据层与业务层,相…...

从 B 站出发,用 Chrome devTools performance 分析页面如何渲染
页面是如何渲染的?通常会得到“解析 HTML、css 合成 Render Tree,就可以渲染了”的回答。但是具体都做了些什么,却很少有人细说,我们今天就从 Chrome 的性能工具开始,具体看看一个页面是如何进行渲染的,以及…...

Java异常Throwable的分类
1. Exception:程序本身可以捕获并且可以处理的异常 编译时异常:编译期就会检查的异常,若调用的方法中throw了此类异常,则必须进行显式处理处理(用try…catch捕获或者throws向上抛出),否则无法通…...

【mybatis的#和$使用和区别】
MyBatis是一种基于Java的持久层框架,用于将数据库操作和Java对象之间的映射进行处理。在MyBatis中,#和 $ 符号是用于SQL语句中的占位符。 在SQL语句中,#和 $ 符号都表示占位符,但它们的使用方式略有不同: # 符号 #符…...

感知趋势,洞察发展:2023(第十届)趋势与预测大会成功举办
2023年2月23日,运联年会:2023(第十届)趋势与预测大会在深圳机场凯悦酒店成功闭幕。自2014年开始,“运联年会:趋势与预测”已经连续举办九届。这场大会,既是一次行业性的“年终总结”,…...

Spring-Aop核心技术
前言spring一直以来都是我们Java开发中最核心的一个技术,其中又以ioc和aop为主要技术,本篇文章主要讲一下aop的核心技术,也就是ProxyFactory技术的使用,而基本的jdk动态代理和cglib代理技术并不涉及,如有需要ÿ…...

webpack常用优化原理剖析
webpack常用优化原理剖析 按需加载代码配置原理CDN加速-externals代码配置GZIP压缩代码配置原理Tree Shaking代码配置原理按需加载 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 代码配置 //定义了一个异步函数,由于函数不调用不执行,所…...

【现在努力还不晚】--MySQL数据库的数据模型
目录 1、关系型数据库(RDBMS) 特点 2、数据模型 在学习MySQL之前要了解一下数据库的数据模型,我们就知道在MySQL当中,数据是如何存储的,我们了解一下概念! 1、关系型数据库(RDBMS࿰…...

二手商品交易网站
技术:Java、JSP等摘要:随着科学技术和信息通讯的飞速发展,Internet极大地丰富和改变着我们生活的各个行业。随着Internet的普及应用,人们可以跨越时间和空间的限制,足不出户便能通过网络完成信息交流,而完成…...

第三阶段04-同步请求和异步请求,get/post,Josn,pojo,Session/Cookie,过滤器Filter
文章目录同步请求和异步请求客户端如何发出异步请求自定义模板代码Get和Post请求异步版本的注册和登录商品管理系统(异步版本)商品列表步骤:前后端分离为什么需要前后端分离?为什么以后不再使用同步请求?JSONPOJO会话对象Session如何记住登录状态后端的MVC会话管理Cookie通过…...

Spark学习:spark相似算子解析
spark算子 一、Map、Flatmap和MapPartition二、repartition和coalesce三、reduceByKey和groupByKey四、collect、take和first一、Map、Flatmap和MapPartition 算子作用map接收一个高阶函数f,对每个算子进行f操作flatmap接收一个高阶函数f,对每个元素进行f操作,形成一个大的集合…...