赞
踩
InnoDB(默认)
Myisam
Memory
InnoDB和Myisam的默认索引都是B+tree,不同的是MyISAM的B+树叶子节点存放的是数据的磁盘地址,InnoDB的B+树叶子节点存放的是完整的数据记录
InnoDB支持事务、外键、2种锁(行锁(默认)、表锁),写入操作快,Mysql5.6版本以上才支持全文索引(全文索引不支持中文)
MyISAM支持表锁,不支持行锁
如果没有显示在表定义时指定主键,InnoDB会选择第一个可以唯一标识数据记录的列作为主键索引,如果不存在这种列,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键
Myisam不支持事务、外键,支持表锁、全文索引,写入、读取速度快
每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列
InnoDB一张表两个本地文件(.frm、.idb)MyISAM一张表三个本地文件(.frm、.MYI、.MYD)
Memory的默认索引是hash
Memory所有的数据都保留在内存中,不需要进行磁盘的IO所以读取速度快,
但是一旦关机的话表的结构会保留但是数据会丢失,表支持Hash索引,因此查找速度很快
事务具有四个特征(ACID):
原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )、持久性( Durability )。
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
利用redo_log日志保证mysql的持久性
利用undo_log保证系统的原子性
隔离性通过锁
一致性:是通过事务的原子性、隔离性、持久性共同保证的
一致性是事务的根本追求
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的· 创建版本号,一个保存的是行的删除版本号(可以理解为事务的ID),每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID
SELECT (version)
INSERT (createVersion)
UPDATE (createVersion)
DELETE (deleteVersion)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。