mysql存储引擎 以及事务的隔离机制

mysql存储引擎主流的分为三种
1 mysiam
这种存储引擎分别使用三个问价来表述一张表 .frm文件表示格式文件(存放表结构).myd文件表示数据文件 表中的数据被存储在这个文件当中 .myi文件存储表当中的索引 同时支持压缩节省存储空间 还可以设置为只读 不支持事务
2Innodb
这种存储引擎是mysql默认的存储引擎,每个innodb表在数据库当中都已.frm文件表示,支持事务 支持崩溃后自动恢复,多版本行级锁定 支持外键和引用的完整性 包括级联删除和更新
3 memory
这张存储引擎 使用这种存储引擎的表 它的数据和索引存储再内存当中,且行的长度固定,执行速度非常快,但缺点是数据不是持久的

1).myisam适合大量数据的读 少量数据的更新 另一种场景是 使用压缩的只读表
2).如果查询中包含较多的更新操作 应使用innodb其行级锁机制和多版本的支持为数据读取和更新提供了良好的并发机制
3).可使用memory存储引擎来存储非永久需要的数据,或是能够基于磁盘的表中重新生成的数据
事务
事务是一个最小的不可再分的工作单元,通常一个事物对应一个完整的业务,而一个完整的业务需要批量的(insert update delete)DML语句共同协作完成。之和DML语句有关系
原子性 A
事务是最小的工作单元 不可再分
一致性 C
事务必须要求所有的dml语句必须同时成功 或同时失败
隔离性 I
事务A和事务B之间具有隔离性
隔离性有隔离级别 4个
-读未提交 read uncommited
-读已提交 read commited
-可重复度 repeatable read
-串行化 serializable
持久性
是事务的保证,事务终结的标志
读未提交
事务A 和事务B 事务A未提交的数据,事务B可以读到,这里读取到的数据可以叫做脏数据(脏读),这种隔离级别是最低级的级别 数据库默认的隔离级别应该高于该级别
读已提交
事务A 和事务B 事务A 提交的数据 事务B 才能读取到,这种级别高于上面的级别,换句话说 对方事务提交之后的数据,事务B才能读取到
这种隔离级别 可以避免脏数据,但是有可能导致不可重复读取
可重复读
事务A 和事务B 事务A提交之后的数据 事务B 读取不到,
事务B是可重复读取数据的
这种隔离级别高于读已提交,换句话说:对方提交的数据 我还是读不到,可以避免不可重复度 达到可重复读
串行化
事务A和事务B,事务A 在操作数据库中数据的时候,事务B只能排队等待,这种事务隔离级别一般很少用,吞吐量太低,用户体验不好,可避免“幻象读”,每一次读取的都是数据库表中的真实记录,事务A和事务B 不再并发
mysql存储引擎 以及事务的隔离机制
在执行过程中,未结束之前,DML语句是不会更改底层数据库当中的文件中的数据,只是将历史操作在内存当中记录一下,只有在事务结束的时候,而且是成功结束的时候,才会修改底层硬盘文件中的数据

在mysql数据库管理系统当中,默认情况下 事务是支持自动提交的,也就是说,只要执行一条DML语句 开启事务并且提交事务,