存储引擎:
-
MyISAM:是MySQL的默认存储引擎,不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求;支持B-Tree 索引(默认)、R-Tree 索引、Full-text 索引;
-
Innodb:支持事务安装、数据多版本读取、锁定机制的改进,支持行级锁、实现外键;
-
NDB Cluster:主要用于MySQL Cluster 分布式集群环境;
-
Memory:将数据存储在内存中的存储引擎,支持hash和B-Tree两种格式的索引;实现页级锁定;
锁定机制:
数据锁定机制:数据库为了保证数据的一致性而使各种共享资源在被并发访问变得有序所设计的一钟规则;总的来说,MySQL各存储引擎使用了三种类型的锁定机制:行级锁定、页级锁定、表级锁定。
-
行级锁定:锁定对象的颗粒度很小,发生锁定资源争用的概率最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能;消耗较大,最容易发生死锁;
-
表级锁定:最大颗粒度的锁定机制,出现锁定资源争用的概率最高,支持并发处理能力大打折扣;
-
页级锁定:锁定颗粒度介于行级锁定和表级锁定之间,支持并发能力也介于它们之间;
一句概况:锁定颗粒度越低,操作越复杂,消耗越多,越容易发生死锁,但支持并发处理能力越好。
事务的四大特性:
-
原子性 (atomicity): 强调事务的不可分割,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做;
-
一致性 (consistency): 事务的执行的前后数据的完整性保持一致,事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
-
隔离性 (isolation): 一个事务执行的过程中,不应该受到其他事务的干扰,一个事务的执行不能被其它事务干扰;即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
-
持续性 (durability) : 事务一旦结束,数据就持久到数据库,也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
Innodb:数据隔离级别
-
Read Uncommitted:脏读(读取了未提交的数据,针对单笔数据),最低隔离级别,查询时看到的数据可能并不是查询发起时间点的数据,非一致性读;
-
Read Committed:可能出现不可重复读(读取了多次,获取到不同的数据(被修改或删除),针对单笔数据)、幻读(读取了多次,获取到不同的数据(有新增),针对多笔数据);
-
Repeatable Read:默认的事务隔离级别,可能出现幻读;
-
Serialiable:事务隔离级别的最高级别
主从同步: