From beede5d95e3904845b29d0460d583a8f60f9dc29 Mon Sep 17 00:00:00 2001 From: heibaiying <31504331+heibaiying@users.noreply.github.com> Date: Mon, 30 Dec 2019 15:23:21 +0800 Subject: [PATCH] =?UTF-8?q?Update=20MySQL=5F=E5=9F=BA=E7=A1=80.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/MySQL_基础.md | 45 +++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/notes/MySQL_基础.md b/notes/MySQL_基础.md index 5af9328..3e97a5b 100644 --- a/notes/MySQL_基础.md +++ b/notes/MySQL_基础.md @@ -31,13 +31,13 @@ ### 1.1 InnoDB -InnoDB 是 MySQL 5.5 之后默认的存储引擎,它兼具高可靠和高性能的特性,主要具备以下优势: +InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠、高性能的特点,主要具备以下优势: + DML 操作完全遵循 ACID 模型,支持事务,支持崩溃恢复,能够极大地保护用户的数据安全; + 支持多版本并发控制,它会保存数据的旧版本信息,从而可以支持并发和事务的回滚; + 支持行级锁,支持类似 Oracle 的一致性读的特性,从而可以承受高并发地访问; -+ InnoDB 组织数据时默认按照主键进行聚簇,从而可以提高主键查找的效率。对于频繁访问的数据,InnoDB 还会为其建立哈希索引,从而提高等值查询的效率,这称为自适应哈希索引。 -+ InnoDB 基于磁盘进行存储,所有存储记录按 **页** 的方式进行管理。为弥补 CPU 速度与磁盘速度之间的鸿沟,InnoDB 引用缓存池 (Buffer Pool) 来提高数据的整体性能。查询时,会将目标页读取缓存中;修改时,会先修改缓冲池中的页,然后再遵循 CheckPoint 机制将页刷回磁盘。所有缓存页通过最近最少使用原则 ( LRU ) 来进行定期清理。 ++ InnoDB 组织数据时默认按照主键进行聚簇,从而可以提高主键查找的效率。对于频繁访问的数据,InnoDB 还会为其建立哈希索引,从而提高等值查询的效率,这也称为自适应哈希索引; ++ InnoDB 基于磁盘进行存储,所有存储记录按 **页** 的方式进行管理。为弥补 CPU 速度与磁盘速度之间的鸿沟,InnoDB 引用缓存池 (Buffer Pool) 来提高数据的整体性能。查询时,会将目标页读入缓存中;修改时,会先修改缓冲池中的页,然后再遵循 CheckPoint 机制将页刷回磁盘。所有缓存页通过最近最少使用原则 ( LRU ) 来进行定期清理。 + InnoDB 支持两次写 (DoubleWrite) ,从而可以保证数据的安全,提高系统的可靠性。 一个 InnoDB 引擎完整的内存结构和磁盘结构如下图所示: @@ -50,10 +50,10 @@ InnoDB 是 MySQL 5.5 之后默认的存储引擎,它兼具高可靠和高性 MyISAM 是 MySQL 5.5 之前默认的存储引擎。创建 MyISAM 表时会创建两个同名的文件: -+ 扩展名为 `.MYD`(`MYData`):用于存储表数据; ++ 扩展名为 `.MYD`(`MYData`):用于存储表数据; + 扩展名为 `.MYI` (`MYIndex`): 用于存储表的索引信息。 -在 MySQL 8.0 之后,只会创建上述两个同名文件,因为在该版本中表结构的定义存储在 MySQL 数据字典中,但在 MySQL 8.0 之前,还会存在一个扩展名为 `.frm` 的文件,用于存储表结构信息。MyISAM 与 InnoDB 主要的区别其只支持表级锁,不支持行级锁,不支持事务,不支持自动崩溃恢复,但可以使用内置的 mysqlcheck 和 myisamchk 工具来进行检查和修复。 +在 MySQL 8.0 之后,只会创建上述两个同名文件,因为 8.0 后表结构的定义存储在 MySQL 数据字典中,但在 MySQL 8.0 之前,还会存在一个扩展名为 `.frm` 的文件,用于存储表结构信息。MyISAM 与 InnoDB 主要的区别其只支持表级锁,不支持行级锁,不支持事务,不支持自动崩溃恢复,但可以使用内置的 mysqlcheck 和 myisamchk 工具来进行检查和修复。 ### 1.3 MEMORY @@ -76,7 +76,7 @@ CSV 存储引擎使用逗号分隔值的格式将数据存储在文本文件中 ### 1.5 ARCHIVE -ARCHIVE 默认采用 zlib 无损数据压缩算法进行数据压缩,能够利用极小的空间存储大量的数据。创建ARCHIVE 表时,存储引擎会创建与表同名的 `ARZ` 文件,用于存储数据。它还具有以下特点: +ARCHIVE 存储引擎默认采用 zlib 无损数据压缩算法进行数据压缩,能够利用极小的空间存储大量的数据。创建ARCHIVE 表时,存储引擎会创建与表同名的 `ARZ` 文件,用于存储数据。它还具有以下特点: + ARCHIVE 引擎支持 INSERT,REPLACE 和 SELECT,但不支持 DELETE 或 UPDATE。 + ARCHIVE 引擎支持 AUTO_INCREMENT 属性,并支持在其对应的列上建立索引,如果尝试在不具有 AUTO_INCREMENT 属性的列上建立索引,则会抛出异常。 @@ -84,7 +84,7 @@ ARCHIVE 默认采用 zlib 无损数据压缩算法进行数据压缩,能够 ### 1.6 MEGRE -MERGE 存储引擎,也称为 MRG_MyISAM 引擎,是一组相同 MyISAM 表的集合。 ”相同” 表示所有表必须具有相同的列数据类型和索引信息。可以通过 UNION =(list-of-tables)选项来创建 MERGE 表,如下: +MERGE 存储引擎,也称为 MRG_MyISAM 引擎,是一组相同 MyISAM 表的集合。 ”相同” 表示所有表必须具有相同的列数据类型和索引信息。可以通过 `UNION = (list-of-tables)` 选项来创建 MERGE 表,如下: ```sql mysql> CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MyISAM; @@ -95,7 +95,7 @@ mysql> CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT,message CHAR(20), INDEX ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; ``` -创建表时通过 INSERT_METHOD 选项来控制 MERGE 表的插入:使用 FIRST 或 LAST 分别表示在第一个或最后一个基础表中进行插入;如果未指定 INSERT_METHOD 或者设置值为 NO ,则表示不允许在 MERGE 表上执行插入操作。MERGE 表支持 SELECT,DELETE,UPDATE 和 DELETE 语句,示例如下: +创建表时可以通过 `INSERT_METHOD` 选项来控制 MERGE 表的插入:使用 `FIRST` 或 `LAST` 分别表示在第一个或最后一个基础表中进行插入;如果未指定 INSERT_METHOD 或者设置值为 NO ,则表示不允许在 MERGE 表上执行插入操作。MERGE 表支持 SELECT,DELETE,UPDATE 和 DELETE 语句,示例如下: ```sql mysql> SELECT * FROM total; @@ -120,15 +120,19 @@ mysql> SELECT * FROM total; **平衡二叉树数据结构**: