美文网首页
mysql-存储引擎

mysql-存储引擎

作者: bug_ling | 来源:发表于2020-11-20 11:50 被阅读0次

1、innodb

1.1、什么是事务及其特性

事务:是指程序中一系列严密的逻辑操作,而且所有操作必须全部完成,否则在每个操作中所作的所有更改都会被撤销

特性:

    原子性(automicity):强调事务的不可分割,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

    一致性(consistency):事务的执行前后数据的完整性保持一致,事务的执行使数据从一个状态转换为另外一个状态,但是对于整个数据的完整性保持稳定

    隔离性(isolation):一个事务执行的过程中,不应该受到其他事务的干扰,比如操作一张表时,数据库为每一个用户开启的事务,不能被其他事务所干扰,多个并发事务之间要相互隔离

    持久性(durability):当事务正确完成后,它对于数据的改变是永久性的

1.2、事务的隔离级别

    read uncommitted:读未提交,就是一个事务读取另一个未提交事务的数据 

    read committed:读已提交,就是一个事务等另一个事务提交后才能读取数据 - - 可避免脏读

    repeatable read:可重复读,就是在开始读取数据时,不再允许修改操作 --  可避免脏读、不可重复读的发生

    serializeable:是事务最高的隔离级别,在该级别下,事务串行话顺序执行,可避免脏读、不可重复读、幻读,但是这种事务隔离级别效率低下,比较耗数据库性能,一般不用

查看当前的事务隔离级别:show variables like '%isolation%';

设置事务的隔离级别:set session transaction isolation level read uncommitted;

读未提交的情况:

    set session transaction isolation level read uncommitted;

    事务A和事务B的隔离级别都是read uncommited,当事务A更新数据时,事务B能读取到事务A未提交的更改

读已提交的情况:

    set session transaction isolation level read committed;

事务A和事务B的隔离级别都是read committed,当事务A更新数据时,事务B能读取到事务A已提交的更改

重复读的情况:

    set session transaction isolation level repeatable read;

事务A和事务B的隔离级别都是epeatable read,当事务A更新数据时,事务B能读取不到事务A已提交的更改,只有等事务B结束后才可看到更改

隔离级别和锁同看

1.3、不同的隔离级别所导致的问题

脏读:

    一个事务可以读取另一个未提交事务的数据。需要进行读已提交

不可重复读:

    一个事务进行读取,分别读取到不同的数据。如:事务A对数据进行查询时,此时事务B对数据进行了修改并提交,然后事务A又对数据进行查询,发现数据和之前查找的不一样,从而导致两次读取的数据不一样。出现这种问题的根本原因是事务A在进行读操作时,其他事务对数据进行了修改

    读提交是不能解决此问题的,需要进行可重复读就能解决

幻读:

    一个事务进行读取,分别读取到了不同的数据。需要注意的是这里针对的是数据条数,可以理解为针对多笔数据时个数据集,重点是对数据的新增,所以对表加锁可以解决

不可重复读和幻读的区别:

    从总的来看,两者都是对数据进行了两次查询,但两次查询的结果都不一样

    但从控制的角度来看,两者的区别就比较大,前者只需要锁住满足条件的记录,后者,要锁住满足条件及相近的记录

    避免不可重复读需要锁行,避免幻读需要锁表;不可重复读重点在于update和delete,而幻读的在于insert

注意:MVCC在InnoDB引擎提交读级别解决了不可重复读的问题

相关文章

  • MySQL-事务&MVCC

    前置文章:一、MySQL-存储引擎[https://www.jianshu.com/p/495108c767bc]...

  • mysql-存储引擎

    MRG_MYISAM CSV适用于写CSV日志文件,将结构化业务数据快速导入电子表格。CSV存储引擎以表格形式创建...

  • MySQL-存储引擎

    1、简介 类型Linux中的文件系统,比文件系统要高级 2、mysql中的存储引擎类型 InnoDB(5.5以后的...

  • mysql-存储引擎

    mysql可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎 每一种存储引擎使用不同的存储机制、索...

  • mysql-存储引擎

    说到mysql,首先得先看看mysql支持的存储引擎。mysql支持的引擎很多,以下就常用的几种进行以下介绍。 I...

  • MySQL-存储引擎

    1. 存储引擎种类 1.1 介绍(Oracle MySQL) MySQL 5.5 之前,使用MyISAM引擎作为模...

  • mysql-存储引擎

    1、innodb 1.1、什么是事务及其特性 事务:是指程序中一系列严密的逻辑操作,而且所有操作必须全部完成,否则...

  • MySQL-存储引擎

    如果您对数据库感兴趣,可以添加 DBA解决方案QQ群:855439640 1、简介 2、功能了解 3、存储引擎种类...

  • MySQL-存储引擎

    概述 和大多数的数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。 存储引擎...

  • MySQL-存储引擎

    零、本文纲要 一、MySQL存储引擎 二、InnoDB存储引擎1、InnoDB逻辑存储结构2、InnoDB架构3、...

网友评论

      本文标题:mysql-存储引擎

      本文链接:https://www.haomeiwen.com/subject/ebddiktx.html