学习MySQL的InnoDB存储引擎
InnoDB是一个通用的存储引擎,它很好的平衡了高可靠性和高性能。在MySQL8中,InnoDB是默认的存储引擎。
下面介绍下InnoDB的几个特性。
事务支持
InnoDB中,DML操作遵循ACID模型,通过具备提交、回滚和崩溃恢复能力的事务来保护用户数据。
ACID
ACID模型是一组数据库设计原则,强调对商业数据和关键任务应用程序重要的可靠性方面。MySQL包括像InnoDB存储引擎这样的组件,这些组件严格遵守ACID模型,以确保数据不会被破坏,且在软件崩溃和硬件故障等异常条件下结果不会被扭曲。当你依赖于符合ACID的功能时,你不需要重新发明一致性检查和崩溃恢复机制的轮子。在有额外软件保护措施、超可靠硬件或可以容忍少量数据丢失或不一致的应用程序的情况下,你可以调整MySQL设置,以牺牲部分ACID可靠性来换取更高的性能或吞吐量。
以下部分讨论了MySQL特性,特别是InnoDB存储引擎,与ACID模型的类别如何交互:
- A:原子性。
- C:一致性。
- I:隔离性。
- D:持久性。
行级锁定和MVCC
行级锁定
行级锁定是一种粒度较小的锁定机制,允许数据库管理系统在进行事务处理时对数据表中的单个行进行锁定。这与表级锁定形成对比,表级锁定在操作期间会锁定整个数据表。行级锁定的优势在于它减少了锁冲突的可能性,从而允许更高级别的并发访问。在InnoDB中,行级锁定主要有两种类型:
- 共享锁(S锁):允许事务读取一行数据。
- 排他锁(X锁):允许事务更新或删除一行数据。
当一个事务对某行数据加锁时,其他事务必须等待前一个事务释放锁定,才能对该行数据进行写操作,但可以根据锁的类型并发地进行读操作。
MVCC
MVCC是一种并发控制方法,允许多个事务同时访问数据库,而无需彼此阻塞。这是通过为每个读取的数据库行创建“快照”来实现的,即在特定时间点的数据副本。这意味着事务可以访问数据的特定版本,而不会被其他事务中的更新操作所干扰。MVCC在InnoDB中实现了以下几点:
- 一致性读取:在读取数据时,事务会看到在事务开始之前已经提交的更改。这避免了读取期间的不一致视图,即所谓的“不可重复读”问题。
- 创建数据版本:每当数据被更新时,InnoDB会保留旧版本的数据。这使得其他事务可以访问旧数据,即使在新事务中该数据已经被更改。
- 隐藏的版本字段:InnoDB在每行数据中使用隐藏的版本字段来管理不同的数据版本,支持MVCC的实现。
通过行级锁定和MVCC,InnoDB提供了一种强大的机制,支持高性能的事务处理和高级别的数据一致性。这些特性使得InnoDB非常适合需要处理大量并发读写操作的应用程序
外键约束
MySQL中的外键约束是用来维护不同表之间的数据完整性和关联性的一种数据库功能。通过外键约束,你可以在一个表中定义一个或多个字段,这些字段引用另一个表的主键字段,从而建立两个表之间的关系。这种约束确保了数据的一致性和完整性,防止了数据库中出现孤立的记录。
InnoDB是MySQL中唯一内置支持外键约束的存储引擎
其他
名词解释
DML
DML是指数据库操作语言(Data Manipulation Language operations)的缩写。DML操作用于在数据库中操作数据,包括插入(INSERT)、更新(UPDATE)、删除(DELETE)和查询(SELECT)等操作。。
问题
MyISAM不支持事务,如果在Springboot中使用事务注解对这个表操作,会怎么样