MySQL
服务器 && 客户端
安装
不会真有人不会安装吧???
安装的时候会直接(客户端)和(服务器端)都安装了
服务器端
服务器端:一句话,就是打开服务;打开胸膛,你来存或者取;
以我的小Mac为例子:在/usr/local/mysql/bin目录下,有如下的运行文件,其中我框起来的是可以启动Mysql服务器的命令
window下:应该在安装目录下;
还有一个启动方式:./mysql.server start
mac上由于没有配置文件my.cnf,所以只能通过这个指令启动,哭咯;害,应该需要自己创建一个。
客户端
mysql -h localhost -u root -p密码
客户端与服务器端的连接
本质:两个线程之间的通信过程
通信方式1--TCP/IP
IP地址 + 端口号
服务器启动的时候指定端口号:mysqld -P3307,默认是3306
客户端启动:mysql -h 服务器IP -u root -P 端口号 -p密码
通信方式2--命名管道
启动服务器是:mysqld --enable-named-pipe
启动客户端是:mysql ... --pipe或者--protocol=pipe
通信方式3--共享内存
要求服务器进程和客户端进程在同一台机器上
启动服务器:mysqld --shared-memory
启动客户端:mysql ... --protocol=memory
通信方式4--Unix域套接字
需要在同一台类Unix的机器上启动服务器和客户端
在Unix机器上,假如客户端启动的时候连接的(-h localhost) 或者(--protocol=socket),则客户端和服务器端默认的通信是通过Unix套接字,并且套接字文件默认为 /tmp/mysql.sock
启动服务器:mysqld --socket=/temp/a.txt 没有使用默认的套接字文件
启动客户端:mysql ... --socket=/temp/a.txt
通信过程
客户端进程向服务器进程发送一段文本(MYSql语句),服务器进程处理后再向客户端发送一段文本
连接管理
每当一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端交互,采用的方式就是上面的4种。
处理完,并不会销毁,留给下一个客户端,有点像线程池的感觉哈。
解析和优化
查询缓存
说白了就是:将新来的mysql语句进行对比,假如这条语句跟前面的一条一摸一样,那么我们直接用缓存中的结果(也就是上一次查询的结果会被保存在缓存中)
假如,两条语句有一毛钱的,比如空格不一样,那么就无法命中缓存了。
同时,监控所有表,一旦一个表被insert、update...修改了,那么有关这个表的缓存全部失效
Mysql8.0已经没有了缓存的概念
语法分析
就是将sql语句进行编译的过程
查询优化
你写的sql语句太垃圾,mysql说我帮你优化下呗
存储引擎
存储引擎 | 描述 |
ARCHIVE | 用于数据存档 |
BLACKHOLE | 丢弃写操作 |
CSV | 在存储数据时,以逗号分割各个数据项 |
FEDERATED | 用来访问远程表 |
INNODB | 具备外键支持功能的事务存储引擎 |
MEMORY | 置于内存的表 |
MERGE | 用来管理多个MyISAM表构成的表集合 |
MYISAM | 主要的非事务处理存储引擎 |
NDB | MySQL集群专用存储引擎 |
用的最多的:INNODB、MYISAM、MEMORY;其中INNODB是默认的
存储引擎负责:对表中的数据进行提取和写入工作,我们可以为不同的表设置不同的存储引擎,也就是说不同表可以有不同的物理存储结构,不同的提取和写入方式
创建表是指定引擎 && 修改表引擎