关于mySQL引擎笔记说明

  • 何为数据库的存储引擎
  • mySQL主要存储引擎
  • 存储引擎查看和修改
  • 附加题
  • ACID事务
  • 事务隔离
  • MVCC


作者myCyC的文章:mySQL引擎详解

何为数据库的存储引擎

  • 数据库引擎是用于存储、处理和保护数据的核心服务。使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象。
  • Oracle 和SQL Server等数据库中只有一种存储引擎,而mySQL是“Pluggable Storage Engine Architecture”(可替换存储引擎架构),数据库提供多种的存储引擎,开发者可根据需求的改变更换合适的存储引擎。关系型数据库的引擎可称为表类型。

mySQL主要存储引擎

  1. MyISAM:有较高插入与查询速度,并不支持事务,不支持外键,insert与update。在进行建表时会有(.frm/.MYD/.MYI)三个文件。单存数据的文件能优化数据库查询效率。支持静态,动态,压缩表三种存储方式。
  • 加锁:对并发操作时对数据的保护。分为排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。该引擎独立与操作系统,能在win和linux上运行。
  1. Mrg_Myisam: 是将多个Mysiam引擎表集合,数据依旧在Myisam表里,可删除和更新。为解决为提升效率分库分表,但查询操作麻烦问题,Mrg_Myisam把多表聚合为一个表方便查询,并不影响实际表上的数据。
    在超大规模的数据存储是有用。
  2. Memory(Heap):这种存储方式是把数据存储到内存里,所以其查询的速度会非常快,但一旦掉电数据又没有做保存,将会丢失。因为默认使用了HASH索引,而HEAP也不会浪费大量空间。其能同时支持散列索引(数据查找时使用 == 匹配,但范围查询(<=, >=, <, >)较慢)和B树索引(使用部分查询和通配查询,范围查询较快)。
  3. Blackhole:黑洞搜索引擎是不做实际存储,会丢弃所有插入数据,select到的内容是为空,服务器会记录Blackhole表日志,用于复制数据到备份数据库。一般用来充当日志服务器等。
  4. InnoDB: 该引擎为事务型存储引擎,提供对数据库ACID事务支持,[事务管理ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)]并实现SQL标准四种隔离级别,有行锁定和外键支持。支持自动增加列属性auto_increment, 能够通过bin-log从灾难中恢复和回滚,适合处理多重并发的更新请求。```该引擎不支持FULLTEXT类型索引,因为没有保存表行数,所以遍历时是全表扫描。写效率比较差,而且占用更多磁盘空间保持数据以及索引。
  5. CSV:可以将csv文件作为mysql的表进行处理,数据以文本的方式存储在文件中,为普通的csv文件,以逗号,引号的CSV格式存储,能够直接编辑文件,没有索引,不能为NULL,不能自增。文件结构(.frm/.csv/.csm)
  6. Performace_Schema: 该引擎为Mysql5.5新出的引擎,用于收集数据库服务器的性能参数。表由mysql自己创建。
  7. Archive :该引擎为Mysql5.5支持索引功能,仅仅支持插入和查询,适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度但是对查询的支持较差。只有INSERT和SELECT操作,可以选择Archive。
  8. Federated:按照远程数据库(仅限mysql)在本地数据库中创建一个表结构一样的表定义文件,数据在远端服务器,实现远程数据访问。不支持事务和表结构修改。
存储引擎查看和修改

健 の 随笔的文章:mysql各种引擎对比、实战 查看当前所用引擎
show engines 建表后更改
alter table table_name type = InnoDB; 修改配置文件my.ini
将mysql.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB

附加题

ACID事务

  1. 定义:一件事从开始发生到结束的过程
  2. 作用:确保数据的一致性、完整性、准确性、有效性
  3. 四大特性:
  • 原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作
  • 一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态
  • 隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的
  • 持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩
    溃,修改的数据也不会丢失
  1. 注意点:
    事务只针对于表记录操作(增删改)有效,对于库和表的操作无效
    事务一旦提交结束,对数据库中数据的更改是永久性的

dengjili的文章:事务ACID理解

事务隔离

  1. 事务隔离:多个并发的事务同时访问一个数据库时,一个事务不应该被另一个事务所干扰,每个并发的事
    务间要相互进行隔离
  2. 四种隔离级别:
  • 读未提交(Read Uncommitted)# 一个事务可以读取另一个未提交事务的数据,最低级别
  • 读提交(Read Committed)# 一个事务要等另一个事务提交后才能读取数据,可避免脏读
  • 可重复读(Repeated Read)# 在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、
    不可重复读的发生
  • 串行化(Serializable)# 最高级别,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。
    但是效率低下,比较耗数据库性能,一般不使用
  1. 默认的:可重复读(Repeatable read)

MVCC

全称为Multi-Version Concurrency Control,多版本并发控制。

  • 基本原理:MVCC的实现,通过保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。

古道异禀的文章Mysql中MVCC的使用及原理详解