MySQL引擎

1、引擎分类

  1.1 InnoDB

    是系统的默认引擎,是一个事务型的存储引擎,有行级锁定和外键约束。

  1.2 MyISAM

    没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。

  1.3 Archive

    档案存储引擎只支持INSERT和SELECT操作,适合日志和数据采集类应用,占空间小。

  1.4 Blackhole

    不保存数据;

  1.5 CSV

    可以将普通的CSV文件作为MySQL表处理,但不支持索引;

    可以作为一种数据交换的机制,非常有用。

  1.6 Memory、Merge、Federated(略)

2、InnoDB和MyISAM的对比

  MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
行/表锁

表锁,即使操作一条记录也会锁住整个表,不适合高并发操作

行锁,操作时只锁一行,不对其他行有影响,适合高并发的操作

缓存 只缓存索引,不缓存真实数据 不仅缓存索引还缓存真实数据,对内存要求较高,而且内存大小队性能有决定性影响
关注 节省资源、消耗少,简单业务 并发写、事务、更大资源

3、事务(Transaction)

  3.1 为什么需要事务?

    为保持数据的一致性。

    例如A给B转1000,这是一个操作,数据库层面A会执行 -1000,B也要执行+1000;两个sql操作一个没成功就会让数据变得异常,会导致后续的一系列问题。

  3.2 事务的ACID原则

    原子性(atomicity):

      一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    一致性(consistency):

      在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏,(比如:A向B转账,不可能A扣了钱,B却没有收到);

    隔离性(isolation):

      一个事务的执行不被其他事务影响;

    持久性(durability):

      事务一旦提交,无论系统发生什么问题,结果都不会被影响;

4、为什么InnoDB必须有主键,并且推荐使用整型的自增主键

  因为InnoDB的底层数据结构是B+Tree,必须需要一个主键才可以组织起来(主键值去做节点数据,表数据存储在叶子节点)。如果表没有设置主键,则Mysql会自动的帮你找到一个合适的唯一索引作为主键,若找不到符合条件唯一索引条件的字段时,会生成类似于ROW_ID的虚拟列充当该InnoDB表的主键;

  整型的存储比字段类型要小,对比效率是高于其他数据结构的,字符串等。

  自增的话每次新增的索引就是有序的,只需要在最右边的数据中插入新的数据即可。插入的时候效率更高。

  

  

posted @ 2020-03-10 20:59  门虫不是虫  阅读(162)  评论(0编辑  收藏  举报