132.【MySQL_进阶篇】
MySQL_进阶
- (1).视图的检查选项
- (2).多视图级联 (cascaded)
- (3).多级视图_(local)
- (4).非检查选项_视图
- (5).检查选项_视图 (cascaded 级联)
- (6).检查选项_视图(local)
- (1).逻辑存储结构_表空间 (TableSpace)
- (2).逻辑存储结构_段(Segment)
- (3).逻辑存储结构_区 (Extent)
- (4).逻辑存储结构_页(Page)
- (5).逻辑存储结构_行
- (1).InnoDB_内存结构介绍
- (2). InnoDB_内存结构 Buffer Pool (缓冲池)
- (3).InnoDB_内存结构 Change Buffer (更改缓冲区)
- (4).InnoDB_内存结构 Adaptive Hash Index
- (5).InnoDB_内存结构 Log Buffer (日志缓冲区)
- (1).磁盘结构_System Tablespace (系统表空间)
- (2).磁盘结构_File-Per-Table Tablespaces (独立表空间)
- (3).磁盘结构_General Tablespaces (通用表空间)
- (4).磁盘结构_Undo Tablespaces (撤销表)
- (5).磁盘结构_Temporary Tablespaces (临时表空间)
- (6).磁盘结构_Doublewrite Buffer Files (双写缓冲区)
- (7).磁盘结构_Redo Log(重做日志)
- (1).后台线程_ Master Thread (主线程)
- (2).后台线程_IO Thread (IO线程)
- (3).后台线程_Purge Thread (回收线程)
- (4).后台线程_Page Cleaner Thread (清理页线程)
- (1).MySQL (CMD客户端)
- (2). mysqladmin (管理操作客户端)
- (3).mysqlbinlog (二进制客户端)
- (4).mysqlshow (对象查找客户端) ⭐
- (5).mysqldump (备份客户端工具)
- (6).mysqlimport/source (数据导入客户端)
(一)、存储引擎
1.MySQL体系结构
(1).连接层
最上层一些客户端和连接服务,主要完成一些类似于连接处理、认证授权、及相关的安全方案
。服务器也会为安全接入的每一个客户端验证它所具有的操作权限。
(2).服务层
第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行
。所有跨存储引擎的功能也在这一层实现,如过程、函数等。
(3).引擎层
存储引擎真正的负责了MySQL中数据的存储和提取
,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己需要,来选取合适的存储引擎。
(4).存储层
主要是将数据存储在文件系统之上,并完成与存储引擎的交互。
2.存储引擎简介
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
(1).查看某张表的数据引擎
show create table 表名;
(2).展示此版本支持的所有存储引擎
show engines;
(3).创建表my_myisam,并指定MyIASM存储引擎
create table my_myisam( 字段列表 )engine=存储引擎;
(4).存储引擎示列
-- 查询建表语句 (默认存储引擎- INNODB,mysql5.5版本之后都默认INNODB) show create table account; -- 查询当前数据库支持的存储引擎 show engines; -- 创建表my_myisam,并指定MyIASM存储引擎 create table my_myisam( id int(4), name varchar(10) )engine=MyISAM; -- 查看这张表的数据 show create table my_myisam;
3.存储引擎 _ Innodb
(1).Innodb 介绍
Innodb是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,Innodb是默认的MySQL存储引擎。
(2).Innodb 特点
- DML操作遵循ACID模型,支持事务。
- 行级锁,提高并发性能问题,只锁一行。
- 支持外键 FOREIGN KEY 约束,保证数据的完整性和正确性。
(3).Innodb 磁盘文件
xxx.ibd
: xxxx代表的是表名,innodb引擎的每张表都会对应这样一个表空间文件,存储该表结构(frm、adi)、数据和索引。
注意参数: innodb_file_per_table
如果是这个参数是打开的话,就说明每张表都会对应着一个表空间文件。(自MySQL8.0+以上版本默认开启)
show variables like 'innodb_file_per_table';
- 假如我们的MySQL是 8.0+ 的话,参数默认开启
假如我们有一张表 account
,就有这样的一个account.ibd
文件,而在这个ibd文件中不仅存放表结构
、数据
,还会存放该表对应的索引信息
。 而该文件是基于二进制存储
的,不能直接基于记事本打开,我们可以使用mysql提供的一个指令 ibd2sdi ,通过该指令就可以从ibd文件中提取sdi信息,而sdi数据字典信息中就包含该表show variables like ‘innodb_file_per_table’; 1的表结构。
ibd2sdi 表名.idb;
(4).Innodb 逻辑存储结构
- 一个表空间里包含很多段。
- 一个区里面包含很多区。
- 一个区(内存大小1MB)里面包含很多页;也就是说一个区有64个页
- 一个页(内存大小16KB)里面包含很多行。
- 一个行里面包含: ①最后操作事务的id。②指针。③字段.
4.存储引擎 _ MyISAM
(1).MyISAM 介绍
MyISAM是MySQL早期的默认存储引擎。
(2).MyISAM 特点
- 不支持事务,不支持外键。
- 支持表锁,不支持行锁。
- 访问速度快。
(3).MyISAM 磁盘文件
- xxx.sdi : 存储表结构数据。
- xxx.MYD: 存储数据。
- xxx.MYI: 存储引擎。
5.存储引擎 _ Memory
(1).Memory 介绍
Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断点问题的影响,只能将这些表作为临时表或缓存使用。
(2).Memory 特点
- 内存存放
- hash索引 (默认)
(3).Meory 磁盘文件
- xxx.sdi: 存储表结构信息
6.三大存储引擎的区别
最主要的区别时: 事务、锁、外键。
(1).Innodb 和 MyISAM 区别
Innodb: 支持事务、支持行锁、支持外键。
MyISAM: 不支持事务、支持表锁、不支持外键。
(2).三大存储引擎总结
7.存储引擎选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的系统应用系统,还可以根式实际情况选择多种存储引擎进行组合。
(1).Innodb (高并发 + 增删改查)
是MySQL的默认存储引擎,支持事务、外键。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么Innodb存储引擎是比较合适的选择。
(2).MyISAM (低并发 + 高读插)
如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对对事务的完整性、并发性要求不是和高,那么选择这个存储引擎是非常合适的。 _日志、评论。
(3).MEMORY (访问速度快)
将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。