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>
提示符后输入下边任意一个命令:
quit
exit
\q
例如
mysql> quit Bye
注意,若出现 Bye 只是客户端程序已经关掉了
链接服务端的时候,强烈建议用这种形式
mysql -hlocalhost -uroot -p
点击回车之后才会提示你输入密码:
Enter password:
主要是保护密码安全,防止被他人看见
二、客户端与服务器连接的过程
MySQL
支持下边三种客户端进程和服务器进程的通信方式。
1、TCP/IP
2、命名管道和共享内存
3、Unix域套接字文件
三、服务器处理客户端请求
服务器程序处理来自客户端的查询请求大致需要经过三个部分,分别是连接管理
、解析与优化
、存储引擎
。
1、连接管理
每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。
这样就起到了不频繁创建和销毁线程的效果,从而节省开销。
注意: 服务器会为每一个连接进来的客户端分配一个线程,但是线程分配的太多了会严重影响系统性能,所以需要限制一下可以同时连接到服务器的客户端数量 。
2、解析与优化
- 查询缓存
- 查询缓存可以在不同客户端之间共享,也就是说如果客户端A刚刚查询了一个语句,而客户端B之后发送了同样的查询请求,那么客户端B的这次查询就可以直接使用查询缓存中的数据。
- 如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。
- 缓存有失效的时候。MySQL 的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改 (如
INSERT
、UPDATE
、DELETE
、TRUNCATE TABLE
、ALTER TABLE
、DROP TABLE
或DROP DATABASE
) 则该表的所有高速缓存查询都将变为无效并从高速缓存中删除! - 注意:缓存需要开销, 从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
- 语法解析
- 若查询缓存没有命中,则 进入正式的查询阶段了
- 客户端程序发送过来的请求一段文本,服务器程序首先要对这段文本做分析,判断请求的语法是否正确。
- 接着从文本中将要查询的表、各种查询条件都提取出来放到
MySQL
服务器内部使用的一些数据结构上来。
- 查询优化
- 我们写的
MySQL
语句执行起来效率,但MySQL
的优化程序会对我们的语句做一些优化。 - 优化的结果就是生成一个执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的。
- 可以使用
EXPLAIN
语句来查看某个语句的执行计划。
- 我们写的
3、存储引擎
MySQL
服务器把数据的存储和提取操作都封装到了一个叫存储引擎
的模块里 。
所谓的表
是由一行一行的记录组成的,但这只是一个逻辑上的概念
为了实现不同的功能,MySQL
提供了各式各样的存储引擎
,不同存储引擎
管理的表具体的存储结构可能不同,采用的存取算法也可能不同。
四、常用存储引擎
最常用的就是InnoDB
和MyISAM
查看当前服务器程序支持的存储引擎
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 学习笔记之初步了解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-25MySQL报错Duplicate entry '0' for key 'PRIMARY'
- 2024-05-29阿里 Canal 实时同步 MySQL 增量数据至 ClickHouse 数据库
- 2024-05-24在Linux下管理MySQL的大小写敏感性
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享