-
MySQL存储引擎简介:在开发过程中,需要存储各种类型数据的表,不同方式的处理,而MySQL针对此提供了不同类型的存储引擎:MyISAM、InnoDB、MEMORY、MERGE、ARCHIVE,由于在工作中采用的是InnoDB存储引擎,所以此文说说它。
-
InnoDB存储引擎:支持事物并引入了行级锁定和外键约束,一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是很不错的选择。
适用场景:- 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求;
- 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎;
- 自动灾难恢复。与其它的存储引擎不同,InnoDB表能够自动从灾难中恢复;
- 外键约束。支持外键的存储引擎只有InnoDB;
- 支持自动增加列AUTO_INCREMENT属性。
-
MySQL Transaction:
列举几个在工作中遇到的问题:-
脏读:在事务A中读取到了事务B未commit的数据。例:总仓中暴龙眼镜现有10副,门店A售出总仓中暴龙眼镜一副,扣除库存1,此时门店B也要从总仓中出一副暴龙眼镜,那么他读取到剩余库存是9,修改库存为8,如果此时门店A操作中的订单出现了意外,那么此时事务发生回滚,但是,门店B在后提交的事务中,把库存更改为8,这就是脏读。
-
不可重复读:指在一个事务执行的过程中多次查询某一数据的时候结果不一致的现象,由于在执行的过程中被另一个事务修改了这个数据并提交了事务。这种情况相信在工作中肯定遇到过,就不举例了。
-
幻读:幻读通常指的是对一批数据的操作完成后,有其它事务又插入了满足条件的数据导致的现象。单机服务器,不停机维护时,一般都是先执行sql,如果此次更新,需要修改订单某个字段的值,然后这个时候有用户执行了订单插入,可能就导致有条数据未更新,对于单机服务器更新,如需要执行sql,建议停机维护。
-
-
InnoDB存储引擎锁机制:
- 共享锁:允许事务获得锁后去读数据,此锁允许多个事务同时获取,但不允许其它事务获取更新、删除数据的锁;
- 独占锁:允许事务获得锁后去更新、删除数据,当有有事务获取此锁后,其它需等到此事务提交后才能获取到锁;
- 意向锁:当事务在获取共享锁和独占锁之前,都会首先获取意向共享锁或意向独占锁;
- 记录锁:锁住某行,如果表存在索引,那么记录锁会锁在索引上。如果表没有索引,那么InnoDB会创建一个隐藏的聚簇索引加锁;
- 间隙锁:间隙锁是一种记录行与记录行之间存在空隙或在第一行记录之前或最后一行记录之后产生的锁。间隙锁可能占据的单行,多行或者是空记录。进行区间条件查询的时候,为了在满足事务隔离级别的情况下需要锁住所有满足条件的行;
- Next-Key Locks,NK 是一种记录锁和间隙锁的组合锁。是 2 和 3 的组合形式,既锁住行也锁住间隙。并且采用的左开右闭的原则。InnoDB 对于查询都是采用这种锁的。
MySQL InnoDB 存储引擎
最新推荐文章于 2023-03-17 11:09:37 发布