概念
MySQL 数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。需要注意的是,存储引擎是基于表的,而不是数据库的(即同一个数据库中的不同表可以有不同的存储引擎)。
查看支持哪些存储引擎
想了解 MySQL 中支持的引擎的情况,可以使用如下命令查看:
1 | show engines; |
MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。
MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
在 MySQL 的 InnoDB 引擎中就是指在已提交读 (READ COMMITTD) 和可重复读 (REPEATABLE READ) 这两种隔离级别下的事务对于 SELECT 操作会访问版本链中的记录的过程。
这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。SELECT 可以去版本链中拿记录,这就实现了读-写,写-读的并发执行,提升了系统的性能。
事务日志可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用的是追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。目前大多数存储引擎都是这样实现的,我们通常称之为预写式日志(Write-Ahead Logging),修改数据需要写两次磁盘。
如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。
MySQL Innodb中跟数据持久性、一致性有关的日志,有以下几种:
在讲解 Mysql 的隔离级别与事务之前,先要了解一下概念:什么是 脏读、幻读、不可重复读?
假如有表 User 中数据如下
id | name | age | sex |
---|---|---|---|
1 | Jack | 25 | 男 |
2 | Rose | 23 | 女 |
按位与(&) 都1则1
按位或(|) 有1则1
按位异或(^) 不同为1 相同为0 两数异或 可看作是两数没有进位的加法
在计算机科学中,每当我们要解决一些计算问题时,我们都会定义一组解决该问题需要遵循的步骤。这些步骤统称为算法。
针对特定问题可以有很多算法。那么,如何区分算法的好坏呢?
让我们了解一个好的算法的属性:
因此,我们已经看到了可用于评估算法的三个因素。在这三个因素中,最重要的因素是算法的效率。