MySQL 学习笔记之初步了解

2021/6/14 19:22:58

本文主要是介绍MySQL 学习笔记之初步了解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言:
在新公司只能通过堡垒机链接数据库,少了Navicat 的图形化,略微不习惯

正文:

一、MySQL客户端程序

参数名含义
-h表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填localhost或者127.0.0.1。也可写作 --host=主机名的形式。
-u表示用户名。也可写作 --user=用户名的形式。
-p表示密码。也可写作 --password=密码的形式。

客户端链接服务端例子

 mysql -hlocalhost -uroot -p123456 

另外 -p和密码值之间不能有空白字符(其他参数名之间可以有空白字符):

mysql -h localhost -u root -p123456

还有 mysql的各个参数的摆放顺序没有硬性规定

mysql -p  -u root -h localhost

若想断开客户端与服务端链接,并关闭客户端, 可以在mysql> 提示符后输入下边任意一个命令:

  1. quit
  2. exit
  3. \q

例如

mysql> quit 

Bye 

注意,若出现 Bye 只是客户端程序已经关掉了

链接服务端的时候,强烈建议用这种形式

mysql -hlocalhost -uroot -p

点击回车之后才会提示你输入密码:

Enter password:

主要是保护密码安全,防止被他人看见

二、客户端与服务器连接的过程

MySQL支持下边三种客户端进程和服务器进程的通信方式。

1、TCP/IP

2、命名管道和共享内存

3、Unix域套接字文件

三、服务器处理客户端请求

image_1c8d26fmg1af0ms81cpc7gm8lv39.png-97.9kB

服务器程序处理来自客户端的查询请求大致需要经过三个部分,分别是连接管理解析与优化存储引擎

1、连接管理

每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。

这样就起到了不频繁创建和销毁线程的效果,从而节省开销。

注意: 服务器会为每一个连接进来的客户端分配一个线程,但是线程分配的太多了会严重影响系统性能,所以需要限制一下可以同时连接到服务器的客户端数量 。

2、解析与优化

  • 查询缓存
    • 查询缓存可以在不同客户端之间共享,也就是说如果客户端A刚刚查询了一个语句,而客户端B之后发送了同样的查询请求,那么客户端B的这次查询就可以直接使用查询缓存中的数据。
    • 如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。
    • 缓存有失效的时候。MySQL 的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改 (如 INSERTUPDATEDELETETRUNCATE TABLEALTER TABLEDROP TABLEDROP DATABASE ) 则该表的所有高速缓存查询都将变为无效并从高速缓存中删除!
    • 注意:缓存需要开销, 从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
  • 语法解析
    • 若查询缓存没有命中,则 进入正式的查询阶段了
    • 客户端程序发送过来的请求一段文本,服务器程序首先要对这段文本做分析,判断请求的语法是否正确。
    • 接着从文本中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上来。
  • 查询优化
    • 我们写的MySQL语句执行起来效率,但MySQL的优化程序会对我们的语句做一些优化。
    • 优化的结果就是生成一个执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的。
    • 可以使用EXPLAIN语句来查看某个语句的执行计划。

3、存储引擎

MySQL服务器把数据的存储和提取操作都封装到了一个叫存储引擎的模块里 。

所谓的是由一行一行的记录组成的,但这只是一个逻辑上的概念

为了实现不同的功能,MySQL提供了各式各样的存储引擎,不同存储引擎管理的表具体的存储结构可能不同,采用的存取算法也可能不同。

四、常用存储引擎

最常用的就是InnoDBMyISAM

查看当前服务器程序支持的存储引擎

SHOW ENGINES;
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

mysql>

Support列表示该存储引擎是否可用;

DEFAULT值代表是当前服务器程序的默认存储引擎;

Comment列是对存储引擎的一个描述;

Transactions列代表该存储引擎是否支持事务处理;

XA列代表着该存储引擎是否支持分布式事务;

Savepoints代表着该存储引擎是否支持部分事务回滚;

设置表的存储引擎

创建表时指定存储引擎

CREATE TABLE 表名(
    建表语句;
) ENGINE = 存储引擎名称;

修改表的存储引擎

ALTER TABLE 表名 ENGINE = 存储引擎名称;


这篇关于MySQL 学习笔记之初步了解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程