客户端
连接线程处理
查询缓存
解析器
优化器
存储引擎
1.原子(事务内所有 sql 为一个原子),一致(事务内所有 sql 一起提交),隔离,持久(永久保留在数据库中)
1.未提交读( READ UNCOMMITTED ),事务可以读取未提交的数据,也叫脏读。
2.提交读( READ COMMITED ),一个事务从开始到提交所做的任务修改对其他事务都是不可见的,也叫不可重复读。
3.可重复读( REPEATABLE READ ),解决脏读的问题,保证同一个事务多次读取同样的记录结果是一致的,但随之会产生幻读(当一个事务读取某范围值时,另一个事务插入了新的记录,之前的事务再次读取改范围的记录,产生的幻行)的问题,InnoDB 和 XtraDB 存储引擎通过多版本并发控制解决幻读问题( MVCC ),可重复读时 musql 默认的事务隔离级别。
4.可串行化( SERIALIZABLE ),最高隔离级别,强制事务串行执行,避免了幻读,给每一行枷锁,导致大量的超时和锁争用的问题。
1.两个事务里的 sql 的锁被对方锁定,陷入的死循环。
2.InnoDB 目前处理死锁的方法是,将只有最少行级的排他锁(写锁)的事务进行回滚。?
1.又称预写式日志,事务日志持久化之后,内存中被修改的数据在后台慢慢刷回到磁盘,修改数据要写两次磁盘。?
1.MVCC 通过保存数据的某个时间点快照来实现
2.通过两个隐藏列,一个列是保存行的创建时间,一个是行的过期时间(或删除时间)
3.MVCC 只在 REPEATABLE READ 和 READ COMMITTED 两个隔离级别下工作
1.数据库可称 schema 保存在数据目录下的一个子目录,创建表时,mysql 会在数据库子目录下的创建一个和表同名的.frm 文件来保存表的定义
1.可选值 Dynamic,Fixed 或者 Compressed,Dynamic 的行长度是可变的如 varchar 和 blob ,Fixed 的行长度是固定的,如 char 和 interger
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.