MySQL常见存储引擎

MySQL存储引擎有很多种,常见的有以下三种,其中MyISAM是5.6版及以前的版本默认存储引擎,InnoDB是5.7版及以后的默认存储引擎,大家重点学习InnoDB存储引擎,但对于MyISAM也要有了解。

  • InnoDB:
    用于事务处理应用程序,支持外键和行级锁。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
    数据和索引存储在一个文件、表结构存储在一个文件,一共两个文件。Innodb(默认的存储引擎)支持数据持久化、事务、行级锁、外键。
  • MyISAM:
    如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
    数据存储在一个文件、索引存储在一个文件、表结构存储在一个文件,一共三个文件。Myisam支持数据持久化。MEMORY:
  • MEMORY:
    将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。
    数据存储在内存中,一共一个文件, Memory数据存储在内存中,断电会导致数据消失。

InnoDB三大优点

  • 支持事务supports transactions
    事务是指将多条语句执行前增加“开启事务”、执行后增加“提交事务”两个步骤,这就将多条语句变成不可分割的原子性操作,从而保证数据的完整性。
    案例,假设甲方给乙方转账300元,需要执行下列语句:
    一、查询甲方账号余额;
    二、甲方账号减少300元;
    三、查询乙方账户余额;
    四、乙方账户增加300元。
    假设执行步骤一和二后遇到断网、断电等特殊情况,那么会发生转账一方钱少了而对方钱未增加的情况。
    若在这四步操作前先执行“开启事务”,执行完四步操作后执行“提交事务”。那么当执行完步骤一和二遇到断网、断电等特殊情况时,因为“提交事务”尚未执行,实质上步骤一和二不会生效,从而避免转账时一方钱少了而对方钱未增加的情况。
  • 行级锁row-level locking
    行级锁在修改的行少的时候使用,表级锁在批量修改多行的时候使用。
    行级锁是指某一任务修改某行数据,其它任务可以修改其它行数据。多个任务可同时修改不同行的数据。
    表级锁是指某一任务在修改数据时,其它任务均不得修改。多个任务只能排队依次修改,不能同时修改。
  • 外键foreign keys
    外键就是表与表之间的某种约定的关系,由于这种关系的存在,能够让表与表之间的数据,更加的完整,关联性更强。
    例如:
    student表:
    学号 姓名 班级 班主任 人数
    1 学生1 A1班 老师A 5
    2 学生2 A1班 老师A 5
    3 学生3 A1班 老师A 5
    4 学生4 A1班 老师A 5
    5 学生5 A1班 老师B 3
    6 学生6 A1班 老师A 5
    7 学生7 A2班 老师B 3
    8 学生8 A2班 老师B 3
    class表:
    班级 班主任 人数
    A1班 老师A 5
    A2班 老师B 3
    在student表中存在大量冗余数据,若使用外键,那么在student表中可以去掉冗余字段老师和人数。在student表中通过外键——班级字段关联到class表。这样在数据关联性更强,若在student表中创建的记录班级字段在class表中不存在则会报错,另外class表中若要删除A1班记录也会报错,提示student中还有很多记录关联到A1班。
    使用外键可以减少数据冗余,提高数据关联度,降低差错率。