第九章 MySQL存储引擎

本章只是对存储引擎做一个基础的介绍,对不同的存储引擎的特点做一个了解。

1. 存储引擎简介

定义:

- MySQL可以将数据不同的技术存储在文件(内存)中,这种技术就称为存储引擎。

关系型数据库中数据的存储以表的形式来实现的。所以存储引擎也可以称为表类型。

每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

MySQL支持的存储引擎

  • MyISAM

  • InnoDB

  • Memory

  • CSV

  • Archive

2. MySQL相关知识点之并发处理

在了解每个存储引擎特点前,需要先了解一下并发处理相关的知识。

并发控制:

当多个连接对记录进行操作时保证数据的一致性和完整性。

(例如:一张数据表中,两个用户,其中一个用户删除id为22的商品,另一个用户查询id为22的商品,这样可能就会报错,这时就需要并发控制,在处理并发读或者并发写时,系统会使用锁系统解决该问题)

锁:

【1】共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中不会发生任何变化。

【2】排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。

锁的力度(锁的颗粒)

只需要对需要修改的表或者记录加锁

锁颗粒(锁的单位)

——表锁:是一种开销最小的锁策略。

对整个表进行锁定。

——行锁:是一种开销最大的锁策略。

对每一条记录进行锁定,支持最大并发处理操作。

3. MySQL相关知识点之事务处理

事务:用于保证数据库的完整性

例子:

用户A转账200元给用户B

实现步骤:

(1)从当前账户减掉200元(账户余额大于等于200元)

(2)在对方账户增加200元

那么两个过程应该作为一个整体出现。任何一个环节出现问题,都应该恢复到原有状态

事务的特性:

- 原子性

- 一致性

- 隔离性

- 持久性

4. MySQL相关知识点之外键及索引

外键:保证数据一致性的策略。

索引:是对数据表中一列或者多列的值进行排序的一种结构,使用索引可以快速访问数据表中的特定信息。

5. 各个存储引擎的特点

各个存储引擎的特点

1.扩展

Memory 的存储限制是由内存的大小来决定。

CSV 存储引擎不支持索引。

BlackHole:黑洞引擎,写入的数据都会消失,一般用做数据复制的中继。

2.索引:普通索引、唯一索引、全文索引、btree索引、hash索引……

3.最广泛:MyISAM/InnoDB

MyISAM:适用于事务的处理不多的情况。

InnoDB:适用于事务处理比较多,需要有外键支持的情况

6. 设置存储引擎

【1】通过修改MySQL配置文件实现

-default-storage-engine=engine(MySQL5.5默认使用Innodb存储引擎)

【2】通过创建数据表命令实现

-CREATE TABLE table_name(

)ENGINE=engine;

【3】通过修改数据表命令实现

-ALTER TABLE_name ENGINE [=] engine_name

小结

1.存储引擎:数据的系统的心脏,实现数据存储和查询的功能

2.特点解析

对应的特点为,存储限制、事务安全、是否支持索引、锁的粒度大小、是否支持数据压缩、是否支持外键等。每个技术特点解决的问题是不一样的,不过本质就是为了实现数据存储和查询,是实现的技术不一样,特点不一样,所以我们应该根据需要选择最为合适的。

a.存储限制—数据库能存多少数据

b.事务安全—能否保证数据完整性

c.是否支持索引—能够实现快速查询

d.锁的粒度大小—用于并发控制,实现数据一致性和完整性(表锁、行锁)

e.是否支持数据压缩—-用于数据压缩,能存储更多数据或者改变数据存储结构

f.是否支持外键—能够保证数据的一致性。

3.常用的两种存储引擎及其特点

  • MyISAM:存储闲置可达256TB,支持索引,表级锁定,数据压缩
  • InnoDB:存储闲置为64TB,支持事务和索引,锁颗粒为行锁