MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL中MyISAM与InnoDB的区别
通过以上区别总结出:
InnoDB: 数据可靠性要求比较高,支持事务,适合表更新和查询比较频繁的场景
MyISAM:适合插入不频繁,查询频繁的场景
为了保证数据库事务的正确性提出来的一个理论
事务就是一组原子性的sql,是一个独立的工作单元。
我们可以通过设置 AUTOCOMMIT 变量来启动或则禁用自动提交模式。 设置1表示启用AUTOCOMMIT,0表示禁用AUTOCOMMIT。
MySQL中默认的是采取自动提交模式(AutoCommit),
事务并发带来的数据问题
隔离级别(isolation level),是指事务与事务之间的隔离程度,事务之间的隔离级别不同,会引发下面不同的问题
MVCC(multiple-version-concurrency-control)是个行级锁的变种,它在普通读情况下避免了加锁操作,对于写操作只锁定必要的行
InnoDB 实现MVCC,是通过ReadView + Undo Log
实现的,Undo Log 保存了历史快照,ReadView可见性规则帮助判断当前版本的数据是否可见。
快照读: 读取的是记录数据的可见版本(有旧的版本)。不加锁,普通的select语句都是快照读,如:
select * from user where id = 1;
当前读:读取的是记录数据的最新版本,显式加锁的都是当前读
select * from user where id = 1 for update;
select * from user where id = 1 lock in share mode;
MVVC 的一些概念