一、Mysql常用引擎
InnoDB、MyISAM
二、InnoDB-MySQL的默认事务性引擎
InnoDB采用两阶段锁定协议,事务执行过程中,随时都可以执行锁定,锁只有在执行commit或rollback时才能释放,这是隐式锁定。
通过特定语句可以显示锁定,例如:for update。
- InnoDB数据存储在表空间,表空间由一系列数据文件组成,InnoDB可以将每个表的数据和索引存放在单独的文件中。
- 采用MVCC来支持高并发,默认隔离级别是repeatable read,并通过间隙锁(Next-Key locking)防止幻读。InnoDB会给符合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,叫做间隙锁。
- InnoDB表是基于聚簇索引建立的,二级索引必须包含主键列。
- 自适应哈希索引、插入缓冲区等。
- 支持热备份。
MVCC:多版本并发控制,是行级锁的变种,很多情况下可以避免加锁,它是通过保存数据在某个时间的快照来实现的。对于不同存储引擎有乐观并发控制和悲观并发控制。
三、MYISAM
- 不支持事务和行级锁,崩溃后无法恢复。
- 将表存储在两个文件:数据文件.MYD、索引文件.MYI。
- 表级锁,读写锁,在表读取的同时可以插入数据。