本专栏,用作复习,不建议小白,建议者勿看
一、了解MySQL
二、MySQL的客户端/服务器架构
以我们平时使用的微信为例,它其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。客户端可 能有很多种形式,比如手机 APP ,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就是你的微 信号,另一方面,腾讯公司在他们的机房里运行着一个服务器软件,我们平时操作微信其实都是用客户端来和这 个服务器来打交道。比如狗哥用微信给猫爷发了一条消息的过程其实是这样的:
MySQL 的使用过程跟这个是一样的,它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序 连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从而操作它维护的数据。和微信一样, MySQL 的每个客户端都需要提供用户名密码才能登录,登录之后才能给服务器发请求来操作某些数据。我们日常使用 MySQL 的情景一般是这样的:
1) 我们知道计算机很牛逼,在一台计算机上可以同时运行多个程序,比如微信、QQ、音乐播放器、文本编辑器啥的,每一个运行着的程序也被称为一个 进程 。我们的 MySQL 服务器程序和客户端程序本质上都算是计算机上的一个 进程 ,这个代表着 MySQL 服务器程序的进程也被称为 MySQL数据库实例 ,简称 数据库实例 。
2)每个进程都有一个唯一的编号,称为 进程ID ,英文名叫 PID ,这个编号是在我们启动程序的时候由操作系统随 机分配的,操作系统会保证在某一时刻同一台机器上的进程号不重复。比如你打开了计算机中的 QQ 程序,那么 操作系统会为它分配一个唯一的进程号,如果你把这个程序关掉了,那操作系统就会把这个进程号回收,之后可 能会重新分配给别的进程。当我们下一次再启动 QQ 程序的时候分配的就可能是另一个编号。每个进程都有一个名称,这个名称是编写程序的人自己定义的,比如我们启动的 MySQL 服务器进程的默认名称为 mysqld , 而我们常用的 MySQL 客户端进程的默认名称为 mysql 。
三、MySQL安装
Windows 的简单安装就不聊了,我觉得太简单,略
聊bin目录下的可执行文件
cd usr/local/mysql/bin
聊启动MySQL服务器程序
UNIX启动服务程序
在类 UNIX 系统中用来启动 MySQL 服务器程序的可执行文件有很多,大多在 MySQL 安装目录的 bin 目录下,我们一起来瞅瞅。
1)mysqld
mysqld 这个可执行文件就代表着 MySQL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用,我们继续往下看更牛逼的启动命令。
2)mysqld_safe
mysqld_safe 是一个启动脚本,它会间接的调用 mysqld ,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。
其实我们一台计算机上也可以运行多个服务器实例,也就是运行多个 MySQL 服务器进程。 mysql_multi 可执行文件可以对每一个服务器进程的启动或停止进行监控。这个命令的使用比较复杂,本书主要是为了讲清楚 MySQL 服务器和客户端运行的过程,不会对启动多个服务器程序进行过多唠叨。
Windows里启动服务器程序
Windows 里没有像类 UNIX 系统中那么多的启动脚本,但是也提供了手动启动和以服务的形式启动这两种方式,下边我们详细看。
mysqld
同样的,在 MySQL 安装目录下的 bin 目录下有一个 mysqld 可执行文件,在命令行里输入 mysqld ,或者直接双击运行它就算启动了 MySQL 服务器程序了。
启动MySQL客户端程序
聊连接注意事项
聊客户端与服务器连接的过程
我们现在已经知道如何启动 MySQL 的服务器程序,以及如何启动客户端程序来连接到这个服务器程序。运行着的服务器程序和客户端程序本质上都是计算机上的一个进程,所以客户端进程向服务器进程发送请求并得到回复的 过程 本质上是一个进程间通信的过程 ! MySQL 支持下边三种客户端进程和服务器进程的通信方式。
TCP/IP
命名管道和共享内存
Unix域套接字文件
服务器处理客户端请求
其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是: 客户端进程向服务器进程发送一段文本( MySQL 语句),服务器进程处理后再向客户端进程发送一段文本(处理结果) 。那服务器进程对客 户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请求为例来画个图展示一下大致的过程:
连接管理
解析与优化
到现在为止, MySQL 服务器已经获得了文本形式的请求,接着 还要经过九九八十一难的处理,其中的几个比较重要的部分分别是 查询缓存 、 语法解析 和 查询优化 ,下边我们详细来看。
第一步查询缓存
第二步语法解析
第三步查询优化
存储引擎
常用的存储引擎
关于存储引擎的一些操作
设置表的存储引擎
我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎 InnoDB (当然这个默认的存储引擎也是可以修改的,我们在后边的章节中再说怎么改)。如果我们想显式的指定一下表的存储引擎,那可以这么 写:
修改表的存储引擎
查看设置变量(以及全局)
-- 1.1、查看全局变量(503)
show GLOBAL VARIABLES
-- 1.2、查看所有变量(517)
SHOW VARIABLES-- 2.1、查看单个变量(两种方式,结果不同)
show GLOBAL VARIABLES like 'autocommit'; -- 结果:autocommit OFF
SELECT @@autocommit; -- 结果:1-- 3.1、设置全局变量(两种方式,即其他会话连接都会修改该变量值,但是设置时其他原本就连接session的不会生效。本session要重新连接才会生效)
set @@GLOBAL.autocommit = 1
set GLOBAL autocommit = 0
-- 3.2、设置变量(只对本次session会话有效)
set autocommit = 1
注意点:设置全局变量时,其他已经进行连接的不会生效退出重新登录则会生效。若是出现还是不生效问题时,建议去修改my.ini
配置文件,接着进行重启数据库。